在我的变量数据中,当运行“添加变量”脚本代码时,如何为所有类型定义通用容器?访问它们的通用公式是什么?这很烦人,因为我必须为每种类型定义一个矢量模板(int float double等)。我的变量应该只包含一个通用的矢量对象,无论它是int,还是浮点数或双精度等等。有可能吗?有什么想法吗?
答案 0 :(得分:0)
这是标准模板库 ..
的重点std::vector<int>
std::vector<float>
两个向量 - 相同的类,用不同类型模板化。
如果您想要一个不同类型的容器,您可能需要查看std::tuple
答案 1 :(得分:0)
哦,你想要一个适合任何类型的容器吗?是的你可以。但在某些限制范围内。
请参阅boost::any
和boost::variant
。 boost::variant
可以在声明 boost::variant
时保存枚举的几种类型的数据。 boost::any
不会让您枚举您想要支持的所有类型,但是您需要将它们强制转换为自己获取值。
简而言之,您必须将类型信息存储在其他位置(使用boost::any
时),或者仅支持几种类型(例如,支持int
和double
的异构向量使用boost::variant
)
template
完全无需为每种类型编写相同的类。
例如:
// function template
template <class T>
T GetMax (T a, T b) {
T result;
result = (a>b)? a : b;
return (result);
}
此GetMax
应适用于具有>
运算符的任何类型。所以这正是{C}中template
的含义。
如果你需要更多关于在C ++上实现向量的帮助(顺便说一下,当涉及到具有自己的构造函数和析构函数的自定义类型时,这不是那么简单。你可能需要allocator
才能获得 - 初始化空间),阅读本文(Implementation of Vector in C++)。
答案 2 :(得分:0)
如果您想要一个包含多种不同类型对象的向量,那么您可能希望使用boost::any
或boost::variant
。