假设我有一个名为generic_pair的类,其形式为:

template < typename K, typename V >
struct generic_pair{
  K key;
  V value;
};


现在,问题是我希望能够在STL容器中存储一堆这些generic_pair,但并非容器中的所有都是同一类型。例如,某些元素可能是,而另一些元素可能是等等。问题是我们该怎么做?

我的第一个想法是使用“标签”创建封装类型的层次结构,并使用通用类型声明容器,而使用继承类型声明实际元素。例如,

struct base_type{
  typedef void type;
};

struct int_type: base_type{
  typedef int type;
}

struct string_type: base_type{
  typedef std::string type;
}

/// and so on establish a type hierarchy as necessary and then...

std::vector < generic_pair < base_type, base_type > > vec;


我敢打赌,有更好,更正确的方法吗?任何想法,方向表示赞赏。如果您在MPL或其他地方看到过类似的实现或相关的工具/技术,那也很有帮助。 (我试图避免宏)

最佳答案

如果类型集是预先确定的,则可以使用Boost.Variant。如果不是,那么Boost.Any可能会成功。

关于c++ - 在STL容器中存储属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4083024/

10-11 23:02
查看更多