【发布时间】:2015-03-26 18:43:14
【问题描述】:
这是我的问题:
我有一个基类,其中包含一个使用函数指针将此类函数“注册”到某个字符串 ID 的方法。我已经设法让它工作,但我需要派生类也能够使用这种机制。编译器强迫我使用包含被调用函数的类名(符号BaseClass::*)来指定函数指针。当我创建派生类时,这显然不起作用。
这是我目前在基类中的简化代码(我将它拆分为 .hh 和 .cc 文件 - 这就是实现分离的原因):
class BaseClass{
public:
BaseClass();
private:
std::map<std::string, void (BaseClass::*)( argType* )> actionMap;
void registerAction( void (BaseClass::*)( argType* ), std::string actionID );
}
BaseClass::BaseClass(){
std::string actionID = "myAction";
void (BaseClass::*fcnPointer)(argType*);
fcnPointer = &BaseClass::sendEthernetFrame;
registerAction( fcnPointer, actionID );
}
void BaseClass::registerAction( void (BaseClass::*actionHandler)( argType* ), std::string actionID ){
actionMap.insert ( std::pair<std::string,void (BaseClass::*)(argType*)>(actionID ,actionHandler) );
}
我需要的是,能够以某种方式在一个列表中存储和寻址不同类的函数指针,并能够在继承链的最高级别调用它们(每个派生类都可以添加自己的函数,这些函数将需要注册)。
我觉得很奇怪,我不能将不同类的函数指针存储为一种类型,因为指针最终只是地址,不是吗?
【问题讨论】:
-
我认为如果不使用诸如
std::function之类的某种类型擦除,就无法做到这一点。
标签: c++ inheritance function-pointers