混合不同的载体< *>成一个向量

时间:2015-11-30 03:56:38

标签: c++ templates vector

假设有一个对象包含一些数据成员,如下所示:

class MyObject {
   int age;
   string name;
   bool is_cool;
   …

   get(string member_name);  // returns the value of member
}; 

现在有一个MyIterator对象,通过它我可以迭代所有MyObject,在此期间我想获得MyObject的一些数据成员,就像伪代码如下:

get_members(vector<string> member_names, vector<*> &output) {
  MyIterator it;
  while (it.next_myobject()) {
    for (name in member_names) {
       output.push_back(it.get(name))
    }
  }
}

我的问题是,我不知道如何实现这个想法,但如果我只获得1个数据成员,我知道如何通过定义模板函数来实现它,如下所示:

template <typename T>
get_member(string member_name, vector<T> &output) {
  MyIterator it;
  while (it.next_myobject()) {
    output.push_back(it.get<T>(member_name));
  }
}

给我一​​些帮助: - )

1 个答案:

答案 0 :(得分:1)

如果您有多种逻辑数据类型,则必须确定要在输出向量中存储的静态类型。 boost::any(使用RTTI,以便稍后可以测试特定类型),boost::variant识别的联合能够存储任何类型的集合列表)是合理的选择。如果你不想使用boost,你至少可以参考他们的文档来理解这些概念,然后看看实现一些最小和类似的东西,虽然我建议你避免这样做,因为你会浪费时间编写/调试它。 ...

如果您的需求真的简单,您可以解决所有值的字符串表示(即std::vector<std::string>& output,使用std::istringstream来表示任意类型)。