如何使用std :: function或Boost在C ++中实现类成员指针?

时间:2014-12-03 08:37:34

标签: c++ oop c++11 boost boost-signals2

我想在C ++中实现面向对象的函数指针(与C#中的委托相当)。

我写了一个示例代码,它使用“MagicFunctionPainter”作为最终类的占位符:

class A
{
public: 
    MagicFunctionPointer p;
    void fireEvent()
    {
         p();
    }
};

class B
{
public:
    void init(A* a)
    {
        a->p = &onEvent;
    }
    void onEvent()
    {
        // in a real-world app, it'd modify class variables, call other functions, ...
    }
};

std :: function或Boost :: Signals2是否支持?还有其他图书馆支持这种情况吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

p的类型应为:

std::function<void(void)> // a function taking no arguments, returning nothing

B::init中使用:

创建此类型的对象
std::bind(&B::onEvent, this);

答案 1 :(得分:0)

你需要绑定它:

 boost::bind(&ClassX::member_function, boost::ref(instance))