如何在同一列表中存储指向任意类类型的方法指针
How to store method pointers to arbitrary class types in the same list?
我需要一种存储方法指针列表的方法,方法指针可以属于不同类型的类。例如:
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()
很慢,请确保所有昂贵的复制参数都是通过引用传递的。
相关文章:
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 将模板化的类型与C++中的某些类/类型进行比较
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 从函数返回任意简单类型的数据
- 包含的类类型显然没有声明,为什么?
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 在 C++ 中输出枚举类类型的向量元素
- 引用不完整的类类型 - C++
- 如何允许模板参数中的类类型,仅当它有两个基类时
- 如何使用 std::make_shared 创建基类类型的智能指针?
- C++如果采用类类型的函数被传递派生类型,有没有办法给出错误?
- 表达式必须具有类类型 vs.
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 有没有办法找到任意类类型的直接基类(如果有的话)?
- C++类中的任意数据类型
- 指向任意类方法的模板非类型指针
- c++模板类;任意容器类型的函数,如何定义它
- 如何在同一列表中存储指向任意类类型的方法指针