1

我想创建一个类,我们将其命名为 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 类的信息来构建,但我希望你能更好地理解我愿意实现的目标。

这可以实现吗?

谢谢

4

2 回答 2

2

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

当然,B对象泄漏exec()看起来并不好。我希望它只是用于测试目的......

于 2012-08-31T09:54:30.500 回答
1

1)“A类需要来自B类的信息,B类需要来自第一类A的信息”

- 防止循环引用使用前向声明

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

  1. 具有纯虚函数的抽象类(Abstr 类)
  2. 其他类继承自它(派生)
  3. 类管理器 - 作为参数抽象类,您可以提供任何派生类并为某些类调用虚函数

我认为给定的方法将使您更有效地使用 OOP 思想

于 2012-08-31T10:02:15.673 回答