我知道经过诸如此类的前瞻声明之后
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>源文件中的任何位置使用,而其他所有不是?别的什么?
谢谢
Bar<Foo>需要完整Foo定义,因为它包含类型的数据成员Foo.在这种情况下你无法转发声明.在这方面,Bar<Foo>相当于
class BarFoo
{
public:
Foo baz;
};
Run Code Online (Sandbox Code Playgroud)