如何避免重新定义模板 包含标题时出错

问题描述 投票:-2回答:1

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

正如here所解释的那样,每个翻译单元只能使用相同的模板。我理解 - 但我如何防止上述错误?由于A和B在其类定义行中使用相同的模板,因此它们都将被拉入相同的C.h文件中。我不知道如何将其拆分为多个文件。

我是否需要在模板.h文件中加入包含警戒? (但那么模板的第二次使用将如何知道课堂上的T是不同的?

c++ templates
1个回答
0
投票

这是否意味着模板只需要包含一次,每次使用时,编译器会将T替换为特定用途?

是的,这是课程模板的重点;您只需定义一次(加上任何特化),编译器就为模板的每个不同实例化生成一个单独的类。

例如,这个:

template<class T>
class Foo {
};

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

© www.soinside.com 2019 - 2024. All rights reserved.