代码之家  ›  专栏  ›  技术社区  ›  TSG

如何避免包含头时模板的重新定义错误

  •  -2
  • TSG  · 技术社区  · 7 年前

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

    如前所述 here 每个翻译单元只能使用同一模板一次。我明白这一点——但是我如何防止上面的错误呢?因为A和B在它们的类定义行中使用相同的模板,所以它们都将被拉到同一个C.h文件中。我不知道怎么把它分成多个文件。

    1 回复  |  直到 7 年前
        1
  •  0
  •   ruakh    7 年前

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

    是的,这就是类模板的全部要点;您只需定义一次(加上任何专门化),编译器就会为每个不同的类生成一个单独的类 实例化 模板的。

    template<class T>
    class Foo {
    };
    

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