0

在我的变量数据中,运行“添加变量”脚本代码时,如何为所有类型定义一个通用容器?访问它们的通用公式是什么?这很烦人,因为我必须为每种类型定义一个矢量模板(int float double 等)。我的变量应该只包含一个通用矢量对象,无论它是 int、float 或 double 等。这可能吗?任何想法?

4

3 回答 3

0

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

于 2013-02-19T11:53:59.837 回答
0

编辑:

哦,你想要一个适合任何类型的容器吗?是的你可以。但在一定的限制范围内。

boost::anyboost::variantboost::variant将使您能够保存声明时枚举的几种类型的 boost::variant数据。boost::any不会让您枚举您想要支持的所有类型,但您需要强制转换它们以自己取回值。

简而言之,您必须将类型信息存储在其他地方(使用时boost::any),或者只支持几种类型(例如,支持intdouble使用的异构向量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应该适用于具有>运算符的任何类型。这正是templateC++ 的用途。

如果您需要更多关于在 C++ 上实现向量的帮助(顺便说一下,对于具有自己的构造函数和析构函数的自定义类型,这并不是那么简单。您可能需要allocator获得未初始化的空间),请阅读此(C++ 中 Vector 的实现)。

于 2013-02-19T11:56:13.757 回答
0

如果您想要一个包含许多不同类型对象的单个向量,那么您可能想要使用boost::any,或者可能boost::variant

于 2013-02-19T11:56:49.710 回答