我需要一种方法来存储方法指针列表,方法指针可以属于不同类型的类。例如:
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但是无法让它工作。有人知道它是否可以吗?
我需要这个的原因是因为我有一个可以发出事件的类 - 我希望任意实例作为方法调用订阅这些事件。这可能吗?
PS。条件适用: 我不想使用Boost 2.我不想使用'Listener'接口,其中订阅者必须子类化抽象接口类。
感谢您的时间。
答案 0 :(得分:2)
转移问题:通过相同的签名清楚地调用您的事件。存储std::function<void(Args...)>
并将适当绑定的对象存储在这些对象中。如有必要,您可以公开一个接受对象引用的接口和一个执行绑定的成员指针。机会是可以创建的合适的函数对象,其更有效,例如,使用lambda函数。
如果使用std::bind()
的速度很慢,请确保通过引用传递所有昂贵的复制参数。