假设我有以下结构体:
struct Point {
double X,Y,Z;
};
以及以下向量:
std::vector<Point> v;
// populate v with random points
现在,我想调用类似 collect(v, X)
的函数,并得到一个包含原始结构体向量中的 X
值的 std::vector
,例如:
v.push_back(Point{1.0, 2.0, 3.0});
v.push_back(Point{1.1, 0.0, -0.5});
auto ans = collect(v,X);
// ans = [1.0, 1.1]
我认为这是一个非常常见的任务,我相信有一个好的名字,但我在提问时想不出来(请随意指出!)。
我可以做到这一点:
std::vector<double> collectX(std::vector<Point> v) {
std::vector<double> output;
for (auto elem : v) {
output.push_back(elem.X);
}
}
/* Repeat for each field the struct Point has... */
我知道C++没有反射。我想知道是否有解决方法?你可以想象,我正在处理的结构体不仅有3个字段,因此为每个字段编写一个方法有些令人望而生畏和不优雅。