#include <iostream>
#include <vector>
struct item
{
int numItems = 0;
float price = 0;
double foo = 0;
item(int num, float pr, double f)
{
numItems = num;
price = pr;
foo = f;
}
};
template <class T>
void printValues(item* vecItemPtr, T item::* targetElemPtr, int numItems)
{
for (int i = 0; i < numItems; i++)
{
std::cout << (vecItemPtr[i].*targetElemPtr) << std::endl;
}
}
int main()
{
std::vector<item> test;
item item1(10, 3.0f, 8);
item item2(20, 1.0f, 4);
test.reserve(2);
test.push_back(item1);
test.push_back(item2);
// Say I want to print numItems,
printValues(test.data(), &item::numItems, test.size());
// Say I want to print price
printValues(test.data(), &item::price, test.size());
// Say I want to print foo
printValues(test.data(), &item::foo, test.size());
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IGl0ZW0KewogICAgaW50IG51bUl0ZW1zID0gMDsKICAgIGZsb2F0IHByaWNlID0gMDsKICAgIGRvdWJsZSBmb28gPSAwOwoKICAgIGl0ZW0oaW50IG51bSwgZmxvYXQgcHIsIGRvdWJsZSBmKQogICAgewogICAgICAgIG51bUl0ZW1zID0gbnVtOwogICAgICAgIHByaWNlID0gcHI7CiAgICAgICAgZm9vID0gZjsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIHByaW50VmFsdWVzKGl0ZW0qIHZlY0l0ZW1QdHIsIFQgaXRlbTo6KiB0YXJnZXRFbGVtUHRyLCBpbnQgbnVtSXRlbXMpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgKHZlY0l0ZW1QdHJbaV0uKnRhcmdldEVsZW1QdHIpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpdGVtPiB0ZXN0OwoKICAgIGl0ZW0gaXRlbTEoMTAsIDMuMGYsIDgpOwogICAgaXRlbSBpdGVtMigyMCwgMS4wZiwgNCk7CgogICAgdGVzdC5yZXNlcnZlKDIpOwogICAgdGVzdC5wdXNoX2JhY2soaXRlbTEpOwogICAgdGVzdC5wdXNoX2JhY2soaXRlbTIpOwoKICAgIC8vIFNheSBJIHdhbnQgdG8gcHJpbnQgbnVtSXRlbXMsIAogICAgcHJpbnRWYWx1ZXModGVzdC5kYXRhKCksICZpdGVtOjpudW1JdGVtcywgdGVzdC5zaXplKCkpOwoKICAgIC8vIFNheSBJIHdhbnQgdG8gcHJpbnQgcHJpY2UKICAgIHByaW50VmFsdWVzKHRlc3QuZGF0YSgpLCAmaXRlbTo6cHJpY2UsIHRlc3Quc2l6ZSgpKTsKCiAgICAvLyBTYXkgSSB3YW50IHRvIHByaW50IGZvbwogICAgcHJpbnRWYWx1ZXModGVzdC5kYXRhKCksICZpdGVtOjpmb28sIHRlc3Quc2l6ZSgpKTsKfQ==