#include <iostream>
#include <vector>
using namespace std;
template <typename T, typename M>
M membersum(vector<T> array, M (T::*mptr)) {
M sum = 0;
for (int i=0; i<array.size(); i++) {
sum += (array[i].*mptr);
}
return sum;
}
struct Point {
Point(int x, int y, float z): x(x), y(y), z(z) {}
int x;
int y;
float z;
};
int main() {
vector<Point> points;
points.push_back(Point(1,2,3.8));
points.push_back(Point(1,2,4.5));
points.push_back(Point(1,2,1.7));
// your code goes here
cout << "sum x: " << membersum(points, &Point::x) << endl;
cout << "sum y: " << membersum(points, &Point::y) << endl;
cout << "sum z: " << membersum(points, &Point::z) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE0+Ck0gbWVtYmVyc3VtKHZlY3RvcjxUPiBhcnJheSwgTSAoVDo6Km1wdHIpKSB7CglNIHN1bSA9IDA7Cglmb3IgKGludCBpPTA7IGk8YXJyYXkuc2l6ZSgpOyBpKyspIHsKCQlzdW0gKz0gKGFycmF5W2ldLiptcHRyKTsKCX0KCXJldHVybiBzdW07Cn0KCnN0cnVjdCBQb2ludCB7CglQb2ludChpbnQgeCwgaW50IHksIGZsb2F0IHopOiB4KHgpLCB5KHkpLCB6KHopIHt9CglpbnQgeDsKCWludCB5OwoJZmxvYXQgejsKfTsKCmludCBtYWluKCkgewoJdmVjdG9yPFBvaW50PiBwb2ludHM7Cglwb2ludHMucHVzaF9iYWNrKFBvaW50KDEsMiwzLjgpKTsKCXBvaW50cy5wdXNoX2JhY2soUG9pbnQoMSwyLDQuNSkpOwoJcG9pbnRzLnB1c2hfYmFjayhQb2ludCgxLDIsMS43KSk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgljb3V0IDw8ICJzdW0geDogIiA8PCBtZW1iZXJzdW0ocG9pbnRzLCAmUG9pbnQ6OngpIDw8IGVuZGw7Cgljb3V0IDw8ICJzdW0geTogIiA8PCBtZW1iZXJzdW0ocG9pbnRzLCAmUG9pbnQ6OnkpIDw8IGVuZGw7Cgljb3V0IDw8ICJzdW0gejogIiA8PCBtZW1iZXJzdW0ocG9pbnRzLCAmUG9pbnQ6OnopIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==