#include <iostream>
#include <memory>
#include <vector>
struct Obj {
int a;
int b;
};
template<typename ClsType, typename ValueType, size_t N>
std::vector<ValueType> fn(const ClsType (&os)[N], ValueType ClsType::*member)
{
std::vector<ValueType> out(N);
for (size_t i = 0; i < N; ++i) {
out[i] = os[i].*member;
}
return out;
}
int main() {
Obj os[] { { 1, 10 }, { 2, 20 } };
auto a1 = fn(os, &Obj::a);
auto a2 = fn(os, &Obj::b);
for (size_t i = 0; i < 2; ++i) {
std::cout << i << ": " << a1[i] << ", " << a2[i] << '\n';
}
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxtZW1vcnk+CgkjaW5jbHVkZSA8dmVjdG9yPgoJCglzdHJ1Y3QgT2JqIHsKCQlpbnQgYTsKCQlpbnQgYjsKCX07CgkKICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsc1R5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZSwgc2l6ZV90IE4+CiAgICBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+IGZuKGNvbnN0IENsc1R5cGUgKCZvcylbTl0sIFZhbHVlVHlwZSBDbHNUeXBlOjoqbWVtYmVyKQogICAgewogICAgCXN0ZDo6dmVjdG9yPFZhbHVlVHlwZT4gb3V0KE4pOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIG91dFtpXSA9IG9zW2ldLiptZW1iZXI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXQ7CiAgICB9CQoKCWludCBtYWluKCkgewoJCU9iaiBvc1tdIHsgeyAxLCAxMCB9LCB7IDIsIDIwIH0gfTsKCgkJYXV0byBhMSA9IGZuKG9zLCAmT2JqOjphKTsKCQlhdXRvIGEyID0gZm4ob3MsICZPYmo6OmIpOwoJCQoJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKSB7CgkJCXN0ZDo6Y291dCA8PCBpIDw8ICI6ICIgPDwgYTFbaV0gPDwgIiwgIiA8PCBhMltpXSA8PCAnXG4nOwoJCX0KCX0=