#include <iostream>
using namespace std;
class Product
{
public:
int ID;
std::string Designation;
};
struct Property
{
std::string Name;
int Shift;
};
class ProductSchema
{
private:
ProductSchema();
public:
static ProductSchema& Default();
ProductSchema(const ProductSchema& other) = delete;
Property ID;
Property Designation;
Property Prix;
};
ProductSchema::ProductSchema()
{
ID.Name = "ID";
ID.Shift = offsetof(Product, ID);
Designation.Name = "Designation";
Designation.Shift = offsetof(Product, Designation);
}
ProductSchema& ProductSchema::Default()
{
static ProductSchema instance_;
return instance_;
}
int main()
{
Product p;
p.ID = 12345;
cout << "Before: " << p.ID << endl;
int* pID = reinterpret_cast<int*>(reinterpret_cast<uintptr_t>(&p) + ProductSchema::Default().ID.Shift);
*pID = 67890;
cout << "After: " << p.ID << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUHJvZHVjdAp7CnB1YmxpYzoKICAgIGludCBJRDsKICAgIHN0ZDo6c3RyaW5nIERlc2lnbmF0aW9uOwp9OwogCnN0cnVjdCBQcm9wZXJ0eQp7CiAgICBzdGQ6OnN0cmluZyBOYW1lOwogICAgaW50IFNoaWZ0Owp9OwoKY2xhc3MgUHJvZHVjdFNjaGVtYQp7CnByaXZhdGU6IAogICAgUHJvZHVjdFNjaGVtYSgpOwpwdWJsaWM6IAogICAgc3RhdGljIFByb2R1Y3RTY2hlbWEmIERlZmF1bHQoKTsKICAgIFByb2R1Y3RTY2hlbWEoY29uc3QgUHJvZHVjdFNjaGVtYSYgb3RoZXIpID0gZGVsZXRlOwogICAgUHJvcGVydHkgSUQ7CiAgICBQcm9wZXJ0eSBEZXNpZ25hdGlvbjsKICAgIFByb3BlcnR5IFByaXg7Cn07ClByb2R1Y3RTY2hlbWE6OlByb2R1Y3RTY2hlbWEoKQp7ICAKICAgIElELk5hbWUgPSAiSUQiOwogICAgSUQuU2hpZnQgPSBvZmZzZXRvZihQcm9kdWN0LCBJRCk7ICAgIAoKICAgIERlc2lnbmF0aW9uLk5hbWUgPSAiRGVzaWduYXRpb24iOwogICAgRGVzaWduYXRpb24uU2hpZnQgPSBvZmZzZXRvZihQcm9kdWN0LCBEZXNpZ25hdGlvbik7Cn0KClByb2R1Y3RTY2hlbWEmIFByb2R1Y3RTY2hlbWE6OkRlZmF1bHQoKQp7CiAgICBzdGF0aWMgUHJvZHVjdFNjaGVtYSBpbnN0YW5jZV87CiAgICByZXR1cm4gaW5zdGFuY2VfOwp9CgppbnQgbWFpbigpCnsgICAgIAogICAgUHJvZHVjdCBwOwogICAgcC5JRCA9IDEyMzQ1OwogICAgY291dCA8PCAiQmVmb3JlOiAiIDw8IHAuSUQgPDwgZW5kbDsKICAgIGludCogcElEID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJnApICsgUHJvZHVjdFNjaGVtYTo6RGVmYXVsdCgpLklELlNoaWZ0KTsKICAgICpwSUQgPSA2Nzg5MDsKICAgIGNvdXQgPDwgIkFmdGVyOiAiIDw8IHAuSUQgPDwgZW5kbDsKfQ==