c++ - 将不同的 vector <*>混合成一个 vector

标签 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))
    }
  }
}

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

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));
  }
}

给我一​​些帮助:-)

最佳答案

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

如果您的需求真的很简单,您也许能够接受所有值的字符串表示(即 std::vector<std::string>& output ,使用 std::istringstream 来获得任意类型的表示) .

关于c++ - 将不同的 vector <*>混合成一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33991219/

相关文章:

c++ - 在 C++ Tizen 中重绘 Canvas

c++ - Boost.flyweight 和 Boost.MPL

c++ - 我在解决简单的参数相关查找/模板类型推断问题时遇到问题

java - 我应该在 Spring MVC 中使用什么模板引擎?

c++ - 将用位集转换的二进制数放入 vector 中

c++ - boost::is_enum 它是如何工作的?

python - clang.cindex.Libclang错误 "Undefined symbol clang_CXXRecord_isAbstract"

c++ - win7 64 上使用 Python 2.7.9 的 pyproj 给出 "Unable to find vcvarsall.bat"

java vector 问题

c++ - 将结构添加到映射 C++