gpt4 book ai didi

派生类中的 C++ 函数指针

转载 作者:行者123 更新时间:2023-11-30 03:54:55 26 4
gpt4 key购买 nike

这是我的问题:

我有一个基类,其中包含一个使用函数指针将此类函数“注册”到特定字符串 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) );
}

我需要的是,能够以某种方式在一个列表中存储和寻址不同类的函数指针,并能够在继承链的最高级别调用它们(每个派生类都可以添加自己的函数,这些函数将需要注册)。

我觉得很奇怪,我不能将不同类的函数指针存储为一种类型,因为指针最终只是地址,不是吗?

最佳答案

您将无法为此使用非静态类方法。 C++ 没有“闭包”的概念,闭包允许将派生方法指针分配给基类方法指针并从中调用。您将不得不使用不同的设计。例如,您可以存储 BaseClass 对象指针列表(因为无论如何您都需要它们来调用非静态类方法),然后在需要时可以调用 virtual 这些对象上的方法,并让每个派生类根据需要覆盖该方法。

关于派生类中的 C++ 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286456/

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