繁体   English   中英

C++ std::vector 带有指向模板的指针 class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM