前向声明:模板和继承
Forward declarations: templates and inheritance
编写框架时,我遇到了以下问题:我有class A
,class B
wchich是从class A
衍生出来的.
class A
有一个函数 wchich 返回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*
.是否可以写前向声明?或者我需要一些不同的东西?
搜索了一下,看到有很多关于模板声明的帖子,但找不到我个人问题的解决方案。这对我来说有点复杂。
感谢您的帮助。
您的前向声明不正确。 它需要:
template <class Number>
class B;
^ no argument list
相关文章:
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 如何在QT Creator上将QWidget声明为继承类的对象
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- C++ 声明继承的构造函数?
- C++具有继承列表的模板声明
- 如何对继承的文件使用前向声明
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 具有继承的未声明标识符(运算符 ostream)
- 为什么使用声明不会继承移动构造函数
- 带有递归继承和使用声明的Variadic模板
- 带有智能指针和继承的构造函数的前向声明
- 声明从C 中的其他类模板继承的类模板
- 错误 - 根据 G++ 未声明的继承类字段
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- 来自无法识别的继承结构的本地声明
- C++ 嵌套前向声明继承
- clang/g++ 与私有继承和使用声明的区别