【发布时间】:2011-12-19 14:55:53
【问题描述】:
这是一个简单的模板;
template <class T>
class tt {
private:
T x;
public:
tt() {x=0;};
Add(T p) {x += p;};
};
...然后是它的子类;
class cc : public tt<int> {
public:
cc() : tt() {};
};
这在 VC 中编译得很好,但在 C++ Builder (XE) 中却没有,它会给出 E2102 错误。 C++ Builder编译器在cc类的构造函数上需要如下语法才能编译;
cc() : tt<int>() {};
实际上,C++ Builder 编译器需要在 cc 类中每次提到 tt 模板时重复模板参数。
标准 C++ 规范是否指定需要不断重复模板参数,还是 C++ Builder 编译器错误?
【问题讨论】:
-
tt是一个模板。tt<int>是一种类型。您只能从类型派生。 -
你可以使用 typedef 来避免重复
-
@KerrekSB,
tt不是指来自tt<int>的注入类名吗? -
是的,如果我必须重复模板参数,那么 typedef 就是计划。对我来说,定义需要重复似乎有点奇怪,“class cc : public tt
”中给出的类型应该足够了,因为我以后不能使用其他参数。 -
@avakar:我认为这仅适用于类模板本身;即如果您说
template <typename T> class Foo;,那么Foo指的是当前实例。不过,我不是 100% 确定。让我们等待一个权威的答案:-)
标签: c++ visual-studio-2010 templates subclassing c++builder-xe