#include <iostream>
#include <vector>
template<typename ElementType, typename MemberType>
std::vector<MemberType> CopyAllOfMember(const std::vector<ElementType> &container, MemberType ElementType::*ptrToMember)
{
std::vector<MemberType> values(container.size());
size_t index = 0;
for(const ElementType &element : container)
{
values[index++] = (element.*ptrToMember);
}
return values;
}
struct TestStruct
{
bool dummyA;
int value;
float dummyB;
};
int main()
{
std::vector<TestStruct> container = {{true, 1, 0.0f}, {true, 2, 0.0f}, {true, 3, 0.0f} };
std::vector<int> justTheInts = CopyAllOfMember(container, &TestStruct::value);
for(int value : justTheInts)
{
std::cout << value << " ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIHR5cGVuYW1lIE1lbWJlclR5cGU+CnN0ZDo6dmVjdG9yPE1lbWJlclR5cGU+IENvcHlBbGxPZk1lbWJlcihjb25zdCBzdGQ6OnZlY3RvcjxFbGVtZW50VHlwZT4gJmNvbnRhaW5lciwgTWVtYmVyVHlwZSBFbGVtZW50VHlwZTo6KnB0clRvTWVtYmVyKQp7CiAgICBzdGQ6OnZlY3RvcjxNZW1iZXJUeXBlPiB2YWx1ZXMoY29udGFpbmVyLnNpemUoKSk7CiAgICAgICAgCiAgICBzaXplX3QgaW5kZXggPSAwOwoJZm9yKGNvbnN0IEVsZW1lbnRUeXBlICZlbGVtZW50IDogY29udGFpbmVyKQogICAgewogICAgICAgIHZhbHVlc1tpbmRleCsrXSA9IChlbGVtZW50LipwdHJUb01lbWJlcik7CiAgICB9CgogICAgcmV0dXJuIHZhbHVlczsKfQoKCnN0cnVjdCBUZXN0U3RydWN0CnsKCWJvb2wgZHVtbXlBOwoJaW50IHZhbHVlOwoJZmxvYXQgZHVtbXlCOwp9OwoKCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8VGVzdFN0cnVjdD4gY29udGFpbmVyID0ge3t0cnVlLCAxLCAwLjBmfSwge3RydWUsIDIsIDAuMGZ9LCB7dHJ1ZSwgMywgMC4wZn0gfTsKCQoJc3RkOjp2ZWN0b3I8aW50PiBqdXN0VGhlSW50cyA9IENvcHlBbGxPZk1lbWJlcihjb250YWluZXIsICZUZXN0U3RydWN0Ojp2YWx1ZSk7CgkKCWZvcihpbnQgdmFsdWUgOiBqdXN0VGhlSW50cykKCXsKCQlzdGQ6OmNvdXQgPDwgdmFsdWUgPDwgIiAiOwoJfQoJCglyZXR1cm4gMDsKfQ==