Capítulo 2: Plantillas de clase: 2.10 Clases de agregación con plantilla

2.10 Agregados templados

2.10 Agregación con plantilla

Las clases agregadas (clases / estructuras sin constructores proporcionados por el usuario, explícitos o heredados, sin miembros de datos privados o protegidos no estáticos, sin funciones virtuales y sin clases base virtuales, privadas o protegidas) también pueden ser plantillas. Por ejemplo:

Clases agregadas (clases / estructuras que cumplen las siguientes condiciones: sin constructores definidos por el usuario, explícitos o heredados; sin miembros de datos privados o protegidos no estáticos; sin funciones virtuales; sin base de herencia virtual, privada o protegida Class) también puede ser una plantilla, por ejemplo:

template <typename T>
 struct ValueWithComment { 
    T value; 
    std :: comentario de cadena ; 
};

define un agregado parametrizado para el tipo del valor que posee. Puede declarar objetos como para cualquier otra plantilla de clase y aún usarla como agregado:

Definir una clase de agregación de tipo de valor parametrizado. Puede declarar un objeto de clase agregado como cualquier otra plantilla de clase, y el objeto sigue siendo del tipo agregado.

ValueWithComment < int > vc; 
vc.value = 42 ; 
vc.comment = " valor inicial " ;

Desde C ++ 17, incluso puede definir guías de deducción para plantillas de clase agregadas:

A partir de C ++ 17, incluso puede agregar plantillas de clase para definirlas como "Asistente de derivación"

ValueWithComment ( char  const *, char  const *) -> ValueWithComment <std :: string > ; 
ValueWithComment vc2 = { " hola " , " valor inicial " };

Sin la guía de deducción, la inicialización no sería posible, porque ValueWithComment no tiene un constructor para realizar la deducción.

Si no hay un "Asistente de derivación", no se puede inicializar. Porque ValueWithComment no tiene un constructor correspondiente que pueda realizar la derivación.

La clase de biblioteca estándar std :: array <> también es un agregado, parametrizado tanto para el tipo de elemento como para el tamaño. La biblioteca estándar de C ++ 17 también define una guía de deducción, que discutimos en la Sección 4.4.4 en la página 64.

El std :: array <> en la biblioteca estándar también es una clase de agregación, cuyo tipo y tamaño de elemento están parametrizados. La biblioteca estándar C ++ 17 también define un asistente de derivación para él, que discutiremos en la Sección 4.4.4 en la página 64.

Supongo que te gusta

Origin www.cnblogs.com/5iedu/p/12709810.html
Recomendado
Clasificación