包含标头时如何避免重新定义template <class t =“”>错误

时间:2019-04-30 01:38:56

标签: c++ templates

我创建了我的第一个模板类,A类和B类都从中降级。现在,在C.h中,我同时包括A.h和B.h

here所述,每个翻译单元只能使用一次相同的模板。我了解这一点-但如何防止出现上述错误?由于A和B在其类定义行中使用相同的模板,因此它们都将被拉入同一C.h文件中。我看不到如何将其拆分为多个文件。

我是否需要在模板.h文件中添加包含防护? (但是,模板的第二种用法如何知道类中的T是不同的?

1 个答案:

答案 0 :(得分:0)

  

这是否意味着模板只需要包含一次,并且每次使用模板时,编译器都会用T代替该特定用法?

是的,这就是类模板的重点;您只需定义一次(加上任何专业化知识),编译器就会为模板的每个不同的 instantiation 生成一个单独的类。

例如,此:

template<class T>
class Foo {
};

然后允许您编写Foo<int>Foo<long>Foo<std::string>Foo<Foo<int> *>等,然后编译器将为每个生成必需的类。 / p>