我想创建一个类,让它命名为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>
这可以实现吗?
谢谢
答案 0 :(得分:2)
看起来你在这里有无限的递归。您在exec()
的构造函数中调用B
,它通过B
语句创建新的new
对象,该语句调用B
的构造函数,调用exec()
等。可能您需要将ponter或引用传递给B
对象exec()
以避免其构造。
当然B
中的exec()
对象泄漏看起来不太好。我希望它仅用于测试目的......
答案 1 :(得分:1)
1)“A级需要来自B级和B级的信息 来自第一类A“
的信息- 防止循环引用前向声明
2)我建议以下实施您的想法:
我认为给定方法可以让您更有效地使用OOP想法