Es posible que lo que está buscando aquí es Patrón de visitante. Si tiene un objeto como usted describe, con un número de campos de miembros no triviales, y encuentra que tiene varias funciones diferentes que atraviesan esta estructura de datos de la misma manera, el patrón de visitante puede ser muy útil para reducir la cantidad de duplicación de código. No es automático, tiene que escribir las funciones que atraviesan todos los campos de miembros, pero solo tiene que hacer eso una vez, y puede usarlo muchas veces con diferentes clases de visitantes que hacen cosas diferentes.
El patrón de visitante En qué consiste escribir un poco de código, se necesita una clase base abstracta para los visitantes:
class VisitorBase
{
virtual void enter(Example& e)=0;
virtual void leave(Example& e)=0;
virtual void enter(AnotherClass& e)=0;
virtual void leave(AnotherClass& e)=0;
etc ...
};
Luego hay que aceptar las funciones en todas las clases que van a ser visitados:
void Example::accept(VisitorBase& visitor)
{
visitor.enter(*this);
member1.accept(visitor);
member2.accept(visitor);
member3.accept(visitor);
visitor.leave(*this);
}
Y finalmente necesita implementar clases concretas de visitantes que realicen el trabajo real que le interesa, que generalmente equivale a recopilar información de la estructura de datos, realizar cambios en la estructura de datos o combinaciones de ambos. Patrón de Google Visitor y encontrarás mucha ayuda sobre esto.
Realmente no creo que esta sea una buena idea. Si necesita repetir algo, entonces declararlo como un contenedor iterable, o ¿por qué no haría esto? – leftaroundabout
echa un vistazo Boost serialización –
C++ no tiene reflejo. Eso significa que no es posible. –