// HeaderFile struct Foo; struct Blah; struct RefClass : public Object { RefClass(Object parent); RefClass(Object parent, int x, int y, int z); void foo(); void bar(); struct Foo_value { Foo get(); void set(Foo); } foo_value; Foo& value(); const Foo& value() const; uint8_t& x(); const uint8_t& x() const; uint16_t& y(); const uint16_t& y() const; uint32_t& z(); const uint32_t& z() const; uint64_t& a(); const uint64_t& a() const; float& f(); const float& f() const; double& g(); const double& g() const; private: struct Pimpl; std::shared_ptr m_data; }; // CppFile struct RefClass::Pimpl { Foo value; uint8_t x; uint16_t y; uint32_t z; uint64_t a; float f; double g; } Foo& RefClass::value() { return m_data->value; } const Foo& RefClass::value() const { return m_data->value; } uint8_t& RefClass::x() { return m_data->x; } const uint8_t& RefClass::x() const { return m_data->x; } uint16_t& RefClass::y() { return m_data->y; } const uint16_t& RefClass::y() const { return m_data->y; } uint32_t& RefClass::z() { return m_data->z; } const uint32_t& RefClass::z() const { return m_data->z; } uint64_t& RefClass::a() { return m_data->a; } const uint64_t& RefClass::a() const { return m_data->a; } float& RefClass::f() { return m_data->f; } const float& RefClass::f() const { return m_data->f; } double& RefClass::g() { return m_data->g; } const double& RefClass::g() const { return m_data->g; } MetaData refClassMetaData() { // need all the function pointers and all the types and value etc } struct RefClassRegisterType { RefClassRegisterType() { RegisterClass("RefClass", refClassMetaData()); } } g_refClass; RefClass::RefClass(Object parent, int x, int y, int z); RefClass::RefClass(Object parent) : m_data(std::make_shared<>...) { }