【发布时间】:2021-12-08 09:12:30
【问题描述】:
我收到以下错误:
- '
- '>:非法,右操作数的类型为'const_Ty'
在下面的代码中。
它是函数指针映射上的一个相对简单的迭代器,其中函数的形式为void (Game::*)(UINT)。我根据浮点数检查该值,然后运行该函数。
问题似乎出在for 行,尽管我在其他地方有另一个基本相似的 for 循环,它可以正常工作。
using FuncPtr = void (Game::*)(UINT);
std::map<FuncPtr, float> funcDelayedTriggerMap;
void Game::PollProcessDelayedTriggers()
{
for (std::map<FuncPtr, float>::iterator it = funcDelayedTriggerMap.begin(); it != funcDelayedTriggerMap.end(); ++it)
{
float currentS = m_timer.GetElapsedSeconds();
if (it->second < currentS)
{
(this->*(it->first))(UINT_MAX);
funcDelayedTriggerMap.erase(it->first);
}
}
}
【问题讨论】:
-
成员函数指针 do not implement operator<, 所以它们不是有效的 std::map 键
-
哦,谢谢。这正是我一直在寻找的答案。
-
将 void* 存储在地图中,然后可以进行比较。见How to compare pointers?。
-
@S.M.由于多重继承和虚拟继承,成员函数指针不保证是单个指针的大小。将其转换为 void* 将导致 undefined behaviour
-
或者更直接地说:成员函数指针实际上并不是指向内存的指针。
标签: c++