[英]C++ std::vector with pointers to a template class
在我正在进行的项目中,我试图制作一个带有指向模板 class 的指针的向量。
template <typename T>
std::vector<templateClass<T>*> vec;
但是,这给了我两个错误:
Error C2133: vec : unknown size
Error C2998: std::vector<templateClass<T>*> vec : cannot be a template definition
如果我将代码更改为:
std::vector<templateClass<int>*> vec;
它工作正常,所以我想问题不在于你不能将模板类与向量一起使用,而是你需要告诉编译器要使用什么类型。 有没有办法解决?
创建 class 实例时,您必须选择类型。 在定义中你可以写 T 但在创建实例时你必须指定类型。
因此,如果您想要定义而不是创建实例,请使用typedef
。
您不能拥有模板化成员。
模板必须来自 class 或 function 模板化声明。
template <typename T>
class blah {
std::vector<templateClass<T>*> vec;
}
编译器需要在代码中的某处定义模板化类型名,例如: blah<int>
如果你有一个模板化成员,你就不能在代码中的任何地方定义类型,编译器也不能决定成员的类型。
模板化类型名是在您首次使用 function 或 class(显式或隐式)时确定的,因此您必须在调用代码可以访问的某个地方拥有模板定义和实现。
看起来您正在尝试将新类型vec<T>
定义为更长的模板化表达式的快捷方式。 通常,这将使用typedef
来完成,但是 C++ 不支持模板化的 typedef。
请注意,在当前代码中,您实质上是在尝试定义一个名为vec
的变量,但您没有为它指定 T 的特定类型,这就是编译器抱怨的原因。
目前 C++ 不支持模板类型定义,所以你必须使用最常见的解决方案,由 Herb Sutter (http://gotw.ca/gotw/079.htm) 提出
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.