gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:35 26 4
gpt4 key购买 nike

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

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() 中将方法指针转换为函数指针。

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

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

感谢您的宝贵时间。

最佳答案

我相信你只是在寻找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();
...
}

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

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