【发布时间】:2016-05-09 05:46:47
【问题描述】:
我是 C++ 新手,我不想使用任何库,因为我想真正了解内部发生的事情。
此外,我尝试使我的库使用率尽可能低(以提高性能并)使其尽可能独立于平台(不导出库)。
所以总而言之,我不想使用 std 或 boost 来解决这个问题。
我的问题:
我有一个 EventHandler,它有一个函数:
template<class T> void EventHandler::SetCallbackFunction(T* obj, void (T::*mem_fkt)(void));
我必须保存对象和函数以便稍后调用它。
有两种可能:
- EventHandler 作为模板类(和 typedef)
- void* -> 但要调用该函数,我需要将其转换回来,为此我需要类名:/
为什么这些不起作用: - EventHandler 不能是模板类,因为它需要处理多个类.. - void* -> 我不知道如何保存类名以便以后转换
我该怎么做?
(或者还有其他方法吗?也许是一种保存类名以供以后转换的方法?)
编辑:
此外,我可能需要为每个类注册多个回调函数,因此接口并不是一个真正的选择。
class A {
public:
void CallbackFktForEventHandler();
void CallbackFktForAnimationHandler();
etc...
};
而且我知道你可以基于这样的方法来解决它:
class A{
public:
void Callback();
static void CallbackStatic(void* self){
static_cast<A*>->CallBack();
};
};
但这对我的口味限制太多了。
【问题讨论】:
-
是什么让您觉得避免使用库对性能有好处?
-
重新编辑:没有什么能阻止你包装多个成员函数:
auto f = wrap(a, &A::CallbackFktForEventHandler); auto g = wrap(a, &A::CallbackFktForAnimationHandler);
标签: c++ templates c++11 callback classname