gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:26:20 25 4
gpt4 key购买 nike

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

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 但无法让它工作。有人知道它是否可以吗?

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

附言。适用条件:1.不想用Boost2. 我不想使用“监听器”接口(interface),订阅者必须在其中子类化抽象接口(interface)类。

感谢您的宝贵时间。

最佳答案

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

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

关于c++ - 如何在同一列表中存储指向任意类类型的方法指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com