【发布时间】:2011-05-07 18:11:12
【问题描述】:
在编写框架时,我遇到了以下问题:
我有class A 和class B wchich 派生自class A。
class A 有一个返回 B* 的函数。
当然不难:
#include <iostream>
using namespace std;
class B; // forward declaration
class A
{
public:
B* ReturnSomeData();
};
class B : public A
{
};
// Implementation:
B* A::ReturnSomeData()
{
return new B; // doesn't matter how the function makes pointer
}
int main()
{
A sth;
cout << sth.ReturnSomeData(); // print adress
}
但是我不得不使用像这里这样的模板:
#include <iostream>
using namespace std;
// This "forward declaration":
template <class Number>
class B<Number>;
// cannot be compiled:
// "7 error: 'B' is not a template"
template <class Number>
class A
{
public:
B<Number>* ReturnSomeData();
};
template <class Number>
class B : public A<Number>
{
};
// Implementation:
template <class Number>
B<Number>* A<Number>::ReturnSomeData()
{
return new B<Number>;
}
int main()
{
A<int> sth;
cout << sth.ReturnSomeData();
}
查看代码。如您所见,我不知道如何处理 A B* 的未知数。是否可以编写前向声明?还是我需要一些不同的东西?
是的,我进行了搜索,发现有很多关于模板声明的帖子,但找不到解决我个人问题的方法。对我来说有点复杂。
感谢您的帮助。
【问题讨论】:
标签: c++ templates inheritance declaration