使用类作为带有前向声明的模板化类的模板参数

Bar*_*uch 3 c++ templates

我知道经过诸如此类的前瞻声明之后

class Foo;
Run Code Online (Sandbox Code Playgroud)

我可以将变量声明为Foo*Foo&,但不是Foo.

如果我有一个模板化的类和实例化

template<class T>
class Bar {
  public:
    T baz;
};
...
Bar<Foo> v;
Run Code Online (Sandbox Code Playgroud)

上述规则将如何适用?Foo必须在Bar定义类的时候被完全声明(而不是仅向前声明),或者在v声明这一点时?或者它可能只需要在Bar<Foo>源文件中的任何位置使用,而其他所有不是?别的什么?

谢谢

jua*_*nza 5

Bar<Foo>需要完整Foo定义,因为它包含类型的数据成员Foo.在这种情况下你无法转发声明.在这方面,Bar<Foo>相当于

class BarFoo 
{  
 public:
    Foo baz;
};
Run Code Online (Sandbox Code Playgroud)

  • @baruch只有当你实例化类型`Bar <Foo>`时.类模板`Bar`对`Foo`一无所知.否则模板根本不起作用. (3认同)