前向声明模板指针

时间:2009-08-23 20:34:23

标签: c++ templates

我真的需要三个陈述,就像这样

class A;
template<class _T> class B;
typedef B<A> C;

转发声明模板类型C的指针,如下所示:

C* c = 0;

我希望能够在我的前瞻性声明中隐藏课程AB,是否可能?

3 个答案:

答案 0 :(得分:8)

虽然不完全相同,但您可以这样做:

class C;
C* c = 0;

然后,在实现文件中,在包含“A”和“B”的头文件之后,定义“C”,如下所示:

class C : public B<A> {};

如果您只需要使用B&lt; A&gt;的默认构造函数,则使用继承而不是typedef。

答案 1 :(得分:3)

是的,你需要。请注意,所有三行都做不同的事情。第一个声明了一个类。第二个声明了一个模板,第三个声明了一个typedef-name。在声明typedef-name时,您可以使用类似“类A”的详细类型说明符来命名类,而不在其范围内包含其名称(包含一些令人讨厌的陷阱) - 但是您无法使用typedef声明进一步折叠模板声明。

我不担心这三条线。如果有必要,我会把它们写出来:)

答案 2 :(得分:1)

我真的不明白你的问题,但代码是这样的:

template<class _T> class B;

是非法的。 C ++保留以下划线开头的名称 和编译器的大写字母&amp;库实现 - 您不能在自己的代码中使用它们。