1*99451b44SJordan Rupprecht #define CLASS(NAME) \ 2*99451b44SJordan Rupprecht class NAME { \ 3*99451b44SJordan Rupprecht public: \ 4*99451b44SJordan Rupprecht struct Inner; \ 5*99451b44SJordan Rupprecht Inner *i = nullptr; \ 6*99451b44SJordan Rupprecht }; \ 7*99451b44SJordan Rupprecht NAME::Inner &getInner##NAME(); 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprecht CLASS(A) CLASS(B)10*99451b44SJordan RupprechtCLASS(B) 11*99451b44SJordan Rupprecht CLASS(C) 12*99451b44SJordan Rupprecht CLASS(D) 13*99451b44SJordan Rupprecht CLASS(E) 14*99451b44SJordan Rupprecht CLASS(F) 15*99451b44SJordan Rupprecht CLASS(G) 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht int main() 18*99451b44SJordan Rupprecht { 19*99451b44SJordan Rupprecht A::Inner &inner_a = getInnerA(); 20*99451b44SJordan Rupprecht B::Inner &inner_b = getInnerB(); 21*99451b44SJordan Rupprecht C::Inner &inner_c = getInnerC(); 22*99451b44SJordan Rupprecht D::Inner &inner_d = getInnerD(); 23*99451b44SJordan Rupprecht E::Inner &inner_e = getInnerE(); 24*99451b44SJordan Rupprecht F::Inner &inner_f = getInnerF(); 25*99451b44SJordan Rupprecht G::Inner &inner_g = getInnerG(); 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht return 0; // break here 28*99451b44SJordan Rupprecht } 29