TMP: ¿cómo escribir código de plantilla que convierta cualquier estructura en una tupla?

¿Es posible usar la meta-programación de plantillas para convertir cualquier estructura o clase en una tupla?

Por ejemplo:

struct Foo
{
  char         c;
  int          i;
  std::string  s;
};

typedef std::tuple< char, int, std::string >  Foo_Tuple;

Sería bueno tener algún código de plantilla que genere Foo_Tuple automáticamente para mí.

RESPONDER

Esto es una exageración para un caso tan simple, pero para casos más elaborados (por ejemplo, ORM o en cualquier momento que necesite escribir un montón de código de placa de caldera, y una mera plantilla o macro es inadecuada para la tarea),Espejo Boost Parece que puede ser extremadamente útil. He buscado en Boost Mirror un poco más: la funcionalidad de reflexión básica (en Mirror y Puddle) no es difícil de entender, es bastante fácil de configurar y parece ser bastante extensa (puede manejar muchas construcciones, incluido C ++ 11 enumeración de clases, etc ...). Considero que esta funcionalidad básica es más que adecuada: solo puedo usar MACROS en la medida en que quiero exponer mis clases a Reflexión (para no tener que escribir el código de la placa de la caldera). Los generadores de Fábrica también parecen ser muy poderosos (con las mismas macros iniciales configuradas, puede intercambiar en cualquier generador de fábrica que desee para generar JSON, SOCI, o una secuencia, etc.), pero tiene una curva de aprendizaje más grande / Configuración, si desea escribir sus propios generadores de fábrica. Un último par de notas: con algunos ajustes menores, pude hacer que funcionara con C ++ 11 en gcc 4.7.2; Además, la documentación ha sido bien identificada y parece que hay ejemplos más que suficientes para ponerse en marcha rápidamente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta