在我的变量数据中,运行“添加变量”脚本代码时,如何为所有类型定义一个通用容器?访问它们的通用公式是什么?这很烦人,因为我必须为每种类型定义一个矢量模板(int float double 等)。我的变量应该只包含一个通用矢量对象,无论它是 int、float 或 double 等。这可能吗?任何想法?
3 回答
That's the whole point of the Standard Template Library..
std::vector<int>
std::vector<float>
Two vectors - the same class, templated with different types.
If you want a container of differing type you might want to look at std::tuple
编辑:
哦,你想要一个适合任何类型的容器吗?是的你可以。但在一定的限制范围内。
见boost::any
和boost::variant
。boost::variant
将使您能够保存声明时枚举的几种类型的 boost::variant
数据。boost::any
不会让您枚举您想要支持的所有类型,但您需要强制转换它们以自己取回值。
简而言之,您必须将类型信息存储在其他地方(使用时boost::any
),或者只支持几种类型(例如,支持int
和double
使用的异构向量boost::variant
)
template
在 C++ 中,完全不需要为每种类型编写相同的类。例如:
// function template
template <class T>
T GetMax (T a, T b) {
T result;
result = (a>b)? a : b;
return (result);
}
这GetMax
应该适用于具有>
运算符的任何类型。这正是template
C++ 的用途。
如果您需要更多关于在 C++ 上实现向量的帮助(顺便说一下,对于具有自己的构造函数和析构函数的自定义类型,这并不是那么简单。您可能需要allocator
获得未初始化的空间),请阅读此(C++ 中 Vector 的实现)。
如果您想要一个包含许多不同类型对象的单个向量,那么您可能想要使用boost::any
,或者可能boost::variant
。