假设有一个对象包含一些数据成员,如下所示:
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));
}
}
给我一些帮助: - )
答案 0 :(得分:1)
如果您有多种逻辑数据类型,则必须确定要在输出向量中存储的静态类型。 boost::any
(使用RTTI,以便稍后可以测试特定类型),boost::variant
(识别的联合能够存储任何类型的集合列表)是合理的选择。如果你不想使用boost,你至少可以参考他们的文档来理解这些概念,然后看看实现一些最小和类似的东西,虽然我建议你避免这样做,因为你会浪费时间编写/调试它。 ...
如果您的需求真的简单,您可以解决所有值的字符串表示(即std::vector<std::string>& output
,使用std::istringstream
来表示任意类型)。