假设有一个包含一些数据成员的对象,如下所示:
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/