que - diferencias entre c++ y c++ 11
Reflexión en tiempo de compilación en C++ 1z? (1)
Los casos de uso de reflexión se describen en N3814:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3814.html
La vista general es que lo haremos como una extensión de la biblioteca Type Traits como se muestra en N3815:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html
Hay dos partes para la reflexión. El primero es introspección . Tomando una entidad y consultando valores constantes al respecto. El segundo es la reificación , que es lo opuesto: usar valores para crear nuevas entidades.
Para la introspección, puede esperar características adicionales que le permitan enumerar y obtener los nombres de los miembros de la clase, las clases base, los enumeradores, los parámetros de funciones, etc., en tiempo de compilación. Desde allí, puede usarlos para cosas como serialización, operaciones de miembros, controles estáticos y otras cosas más.
Además, más adelante, estamos estudiando la reificación, que implicaría crear nuevas entidades a partir de valores constantes con más expresividad de la que se puede con una plantilla. Entonces, quizás pueda completar una estructura std::class_specifier s
y luego llamar a make_type_from_spec(s)
para crear el tipo.
El enfoque de introspección tiene más consenso en este momento, el lado de la cosificación está más alejado.
Hay un grupo de estudio en el comité de estandarización de C ++ para proporcionar una reflexión en tiempo de compilación en C ++ 1z o posterior. Me gustaría saber cuál es exactamente el propósito y cuán poderosas serán las herramientas esperadas?
Por ejemplo, ¿será posible nombrar funciones o clases utilizando estas herramientas?
struct A {int f() {return 42;}};
struct B {int (std::reflect<A>::member<0>::declname)() {return 43;}};
// equivalent to struct B {int f() {return 43;}};
Si no fuera tan poderoso como este, ¿cuáles serán los casos de uso típicos?