【发布时间】:2013-03-02 01:59:38
【问题描述】:
假设一个头文件myheader.hxx定义了一个类模板A,其中定义了一个非模板类B(不依赖于A的模板参数):
template<class T>
class A {
class B {
// ...
};
};
在这种情况下可以在myheader.hxx 中实现B,还是需要单独编写myheader.cxx 以避免在链接时重复定义?这种情况是否由不同的编译器一致处理?
【问题讨论】:
-
B确实取决于您的示例中的模板参数T。不是直接的,但是A<int>::B和A<double>::B是不相关的类型。 -
可能没关系,但我认为
typename T现在比class T更受欢迎。至少“酷孩子”似乎是这样做的。 -
@StephenLin - 是的,有些人认为在这里使用
typename很酷,但class是正确的、更短的,而且这是C++ 标准编写模板的方式。使用typename代替class没有充分的技术理由。 -
@PeteBecker 是的,我知道这不是技术原因,我是在开玩笑......但
class只允许向后兼容。从一开始它就应该是一个新关键字,但 Bjarne 担心可能会造成干扰,现在使用新关键字更清楚了。 -
@StephenLin - 这不是更清楚,只是不同。正如我所说,C++ 标准在任何地方都使用
class。
标签: c++ templates header-files nested-class