#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* targetElemPtr, int numItems)
{
ptrdiff_t targetElementOffset = reinterpret_cast<char*>(targetElemPtr) - reinterpret_cast<char*>(vecItemPtr);
for (int i = 0; i < numItems; i++)
{
std::cout << *reinterpret_cast<T*>(reinterpret_cast<char*>(vecItemPtr + i) + targetElementOffset) << 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[0], &test[0].numItems, test.size());
// Say I want to print price
printValues(&test[0], &test[0].price, test.size());
// Say I want to print foo
printValues(&test[0], &test[0].foo, test.size());
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IGl0ZW0KewogICAgaW50IG51bUl0ZW1zID0gMDsKICAgIGZsb2F0IHByaWNlID0gMDsKICAgIGRvdWJsZSBmb28gPSAwOwoKICAgIGl0ZW0oaW50IG51bSwgZmxvYXQgcHIsIGRvdWJsZSBmKQogICAgewogICAgICAgIG51bUl0ZW1zID0gbnVtOwogICAgICAgIHByaWNlID0gcHI7CiAgICAgICAgZm9vID0gZjsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIHByaW50VmFsdWVzKGl0ZW0qIHZlY0l0ZW1QdHIsIFQqIHRhcmdldEVsZW1QdHIsIGludCBudW1JdGVtcykKewogICAgcHRyZGlmZl90IHRhcmdldEVsZW1lbnRPZmZzZXQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0YXJnZXRFbGVtUHRyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZlY0l0ZW1QdHIpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZlY0l0ZW1QdHIgKyBpKSArIHRhcmdldEVsZW1lbnRPZmZzZXQpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpdGVtPiB0ZXN0OwoKICAgIGl0ZW0gaXRlbTEoMTAsIDMuMGYsIDgpOwogICAgaXRlbSBpdGVtMigyMCwgMS4wZiwgNCk7CgogICAgdGVzdC5yZXNlcnZlKDIpOwogICAgdGVzdC5wdXNoX2JhY2soaXRlbTEpOwogICAgdGVzdC5wdXNoX2JhY2soaXRlbTIpOwoKICAgIC8vIFNheSBJIHdhbnQgdG8gcHJpbnQgbnVtSXRlbXMsIAogICAgcHJpbnRWYWx1ZXMoJnRlc3RbMF0sICZ0ZXN0WzBdLm51bUl0ZW1zLCB0ZXN0LnNpemUoKSk7CgogICAgLy8gU2F5IEkgd2FudCB0byBwcmludCBwcmljZQogICAgcHJpbnRWYWx1ZXMoJnRlc3RbMF0sICZ0ZXN0WzBdLnByaWNlLCB0ZXN0LnNpemUoKSk7CgogICAgLy8gU2F5IEkgd2FudCB0byBwcmludCBmb28KICAgIHByaW50VmFsdWVzKCZ0ZXN0WzBdLCAmdGVzdFswXS5mb28sIHRlc3Quc2l6ZSgpKTsKfQ==