如何在同一列表中存储指向任意类类型的方法指针

How to store method pointers to arbitrary class types in the same list?

本文关键字:任意类 类型 指针 方法 存储 列表      更新时间:2023-10-16

我需要一种存储方法指针列表的方法,方法指针可以属于不同类型的类。例如:

vector<MethodPointers> list;
class A {
    void function(int, int) { ... }
}
class B {
    void function(int, int) { ... }
}
A a;
B b;
MethodPointer p1(&A::function, &a);
MethodPointer p2(&B::function, &b);
list.push_back(p1);
list.push_back(p2);

c++11有哪些实现方法?我研究了std::bind并使其工作,但根据我的测试,它似乎比使用虚拟方法方法慢4倍。我尝试了std::mem_fn,但无法让它工作。有人知道它是否可以吗?

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

p。适用条件:1. 我不想使用Boost2. 我不想使用'Listener'接口,因为订阅者必须继承抽象接口类。

感谢您的宝贵时间。

转移问题:您的事件显然通过相同的签名调用。存储一个std::function<void(Args...)>,并在其中存储适当绑定的对象。如果需要,您可以公开一个接口,该接口接受对象引用和执行绑定的成员指针。可以创建更高效的合适的函数对象,例如,使用lambda函数。

如果使用std::bind()很慢,请确保所有昂贵的复制参数都是通过引用传递的。