当我编写框架时,遇到了以下问题:
我有一个名为
当然,这并不困难:
然而,我必须像这样使用模板:
class A
和一个继承自 class A
的名为 class B
。
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*
中的未知内容。是否可能编写前向声明?还是我需要其他东西?
是的,我搜索了一下,看到有很多关于模板声明的帖子,但找不到解决我的个人问题的方法。对我来说有点复杂。
谢谢您的帮助。
class B
的声明(旧文件我忘记重建以使用模板)。这就是为什么我不能声明:template <class Number> B
(编译器知道“未被模板化”的B,所以它不让我进行新的声明)。因此,我认为没有参数列表的声明是错误的,但实际上是正确的。再次感谢 :). - leuays