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