【发布时间】:2015-08-07 12:11:33
【问题描述】:
我需要一种方法来存储方法指针列表,但我不关心它们属于哪个类。我有这个想法:
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() 中将方法指针转换为函数指针。
我需要这个的原因是因为我有一个可以发出事件的类 - 我希望任意实例以方法调用的形式订阅这些事件。这可以吗?
PS。适用条件: 1.我不想使用Boost 2. 我不想使用“Listener”接口,订阅者必须继承抽象接口类。
感谢您的宝贵时间。
【问题讨论】:
-
让每个类都继承同一个基类怎么样?可以是空的,只是可以去掉模板。
-
你想要的已经存在于标准库/中,并且被称为
function好吧,这不是一回事,但它是我用于信号/插槽机制的东西。请注意,已经有 C++ 的信号槽库。如果我记得的话,Boost 至少有一个。 -
做一些强制转换,所有方法指针的大小都一样。
-
@user1095108:这是一个糟糕、糟糕、糟糕的想法。
-
blogs.msdn.com/b/oldnewthing/archive/2004/02/09/70002.aspx 太可怕了。成员函数指针不是大小都一样,理论上不一样,实际上也不一样。
标签: c++ list c++11 store member-function-pointers