c++ - 可以比较两个仿函数是否相等吗?

标签 c++ c++11 functor

有没有办法让接收两个仿函数作为参数的方法查明它们是否指向同一个函数?具体来说,具有这样的结构:

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/

相关文章:

android - 使用 libzip 在 zip 中写入文件

C++,从 char 数组中提取带符号的多位整数

c++ - 为什么 [std::is_move_assignable] 的行为不如预期?

c++ - 接受任何类型的可调用并且知道参数类型

haskell - Monad 作为附加词

haskell - 将提升函数应用于 Haskell 中的元组(任意长度)

c++ - 运行 make 时找不到 CMake

c++ - SSE/NEON查表优化

c++ - 整齐地约束 API 模板类型

c++ - std::move 之后的僵尸对象