如何在 C++11 中存储任意方法指针?

How to store arbitrary method pointers in c++11?

我需要一种方法来存储方法指针列表,但我不关心它们属于什么 class。我想到了这个:

struct MethodPointer
{
    void *object;
    void (*method)(void);
};

然后我可以有一个采用任意方法的函数:

template <typename T>
void register_method(void(T::*method)(void), T* obj) {
    MethodPointer pointer = {obj, method);

}

void use_method_pointer() {
    ...
    MethodPointer mp = ...

    // call the method
    (mp.object->*method)();

    ...
}

这显然无法编译,因为我无法在 register_method() 中将方法指针转换为函数指针。

我需要这个的原因是因为我有一个可以发出事件的 class - 我希望任意实例以方法调用的形式订阅这些事件。这可能吗?

PS。适用条件: 1.不想用Boost 2. 我不想使用 'Listener' 接口,订阅者必须从 class 抽象接口 class.

感谢您的宝贵时间。

我相信你只是在寻找std::function:

using NullaryFunc = std::function<void()>;

报名人数:

template <typename T>
void register_method(void(T::*method)(void), T* obj) {
    NullaryFunc nf = std::bind(method, obj);

    // store nf somewhere  
}

用法:

void use_method() {
    ...
    NullaryFunc nf = ...;
    // call the function
    nf();
    ...
}