有没有办法让接收两个仿函数作为参数的方法查明它们是否指向同一个函数?具体来说,具有这样的结构:
struct FSMAction {
void action1() const { std::cout << "Action1 called." << std::endl; }
void action2() const { std::cout << "Action2 called." << std::endl; }
void action3() const { std::cout << "Action3 called." << std::endl; }
private:
// Maybe some object-specific stuff.
};
还有这样的方法:
bool actionsEqual(
const std::function<void(const FSMAction&)>& action1,
const std::function<void(const FSMAction&)>& action2)
{
// Some code.
}
是否有“某些代码”仅针对以下情况返回 true
:
actionsEqual(&FSMAction::action1, &FSMAction::action1)
但不适用于:
actionsEqual(&FSMAction::action1, &FSMAction::action2)
也许这个问题没有任何意义(第一个线索是互联网上似乎没有关于它的任何内容......)。如果是这样,您能否给出提示,为什么,以及是否有方法可以完成“类似”的事情? (基本上,我想要一组仅包含上述意义上的“独特”项目的回调。)
最佳答案
原始函数最终是一个指针。你可以dig it out std::function
的
与 std::function::target
然后它只是 void*
的比较。
关于c++ - 可以比较两个仿函数是否相等吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55692017/