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

标签 c++ inheritance function-pointers

这是我的问题:

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

相关文章:

c++ - std::bit_cast 生成多个值的值表示的示例是什么?

c++ - “CalucateNumbers”缺少异常规范 'noexcept'

c++ - 在 tinyxml2 中添加文本

python - 通过继承连接类变量?

.net - 以函数式方法解决继承依赖

c++ - 简单C++继承的错误

c++ - 指向 C++ 类成员函数的指针作为全局函数的参数?

c++ - 在 C++ 中声明对象的问题

c++ - 函数类型用于什么?

c - 如何使用位于结构中的函数指针来运行函数? (C)