我创建了我的第一个模板类,A类和B类都从这个类中下降。现在,在C.h我包括A.h和B.h
正如here所解释的那样,每个翻译单元只能使用相同的模板。我理解 - 但我如何防止上述错误?由于A和B在其类定义行中使用相同的模板,因此它们都将被拉入相同的C.h文件中。我不知道如何将其拆分为多个文件。
我是否需要在模板.h文件中加入包含警戒? (但那么模板的第二次使用将如何知道课堂上的T是不同的?
这是否意味着模板只需要包含一次,每次使用时,编译器会将T替换为特定用途?
是的,这是课程模板的重点;您只需定义一次(加上任何特化),编译器就为模板的每个不同实例化生成一个单独的类。
例如,这个:
template<class T>
class Foo {
};
然后允许你编写Foo<int>
,Foo<long>
,Foo<std::string>
,Foo<Foo<int> *>
等等,编译器将为每个编译必需的类。