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

时间:2012-08-31 09:35:38

标签: 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的信息,但我希望您能更好地理解我愿意实现的目标。 / p>

这可以实现吗?

谢谢

2 个答案:

答案 0 :(得分:2)

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

当然B中的exec()对象泄漏看起来不太好。我希望它仅用于测试目的......

答案 1 :(得分:1)

1)“A级需要来自B级和B级的信息 来自第一类A“

的信息

- 防止循环引用前向声明

2)我建议以下实施您的想法

  1. 抽象类 纯虚函数/ s (类Abstr)
  2. 其他类继承自(派生)
  3. 类管理器 - 获取作为参数的抽象类,可以提供任何派生类并为ceratain类调用虚函数
  4. 我认为给定方法可以让您更有效地使用OOP想法