c++ - 将函数从一个类发送到另一个类并在 C++ 中执行

标签 c++ class function inheritance signature

我想创建一个类,我们将其命名为 A 类,它执行其他类的函数。所以我想从这个A类和A类继承我的类,以便能够从派生类接收函数地址并执行它们。

这是我目前的想法:

#include <iostream>
using namespace std;

template <class T>
class A
{
public:
    // a typedef for the function I want to execute 
    // which has no parameters and void as return type
    typedef void (T::*SpecialFunc)();

    A() { }

    //this is the function that executes the received functions
    void exec(SpecialFunc func)
    {
        ((new T)->*func)();
    }
};

class B : public A<B>
{
public:
    B()
    {
        // call A::exec to call my function
        exec(&B::funcB);
    }

    //function I want to be executed
    void funcB()
    {
        cout << "testB\n";
    }
};

int main()
{
    B ob;

    return 0;
}

我想要的是要调用的函数 funcB。到目前为止,我的程序没有错误地中断,只是严重中断。 我知道这段代码无法工作,因为我尝试构建需要来自 B 类的信息的 A 类,而 B 类需要来自要构建的第一个 A 类的信息,但我希望你能更好地理解我想要实现的目标。

这能实现吗?

谢谢

最佳答案

看起来你在这里有无限递归。您在 B 的构造函数中调用 exec(),它通过调用构造函数的 new 语句创建新的 B 对象B 调用 exec() 等。可能您需要将 ponter 或对 B 对象的引用传递给 exec() 避免其构造。

当然 B exec() 中的对象泄漏看起来不太好。我希望这只是为了测试目的......

关于c++ - 将函数从一个类发送到另一个类并在 C++ 中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212685/

相关文章:

c++ - 将 Bitset 数组转换为 vector <bool>

c++ - 前向声明类时成员函数的行为

java "redundant"包装类?

javascript - 在 javascript 中使用交通灯序列函数时,图像不显示

c++ - 有关在模板类中重载 new 运算符的错误

c++ - 用 C++ 连接到 UDP 跟踪器

c++ - 为什么类大小只取决于数据成员而不取决于成员函数?

flutter - 将字符串传递给 Flutter 中的类?

c# - 如何去Jquery中的函数定义?

javascript - 没有大括号的 JavaScript 中的 Lambda 函数语法