Reglas de sintaxis para el token "..." en plantillas variadas
En C, las plantillas variadas permiten la construcción de plantillas que aceptan un número variable de argumentos. El token "..." juega un papel crucial en este contexto, ya que sirve como paquete de argumentos o como desempaquetador de parámetros.
Reglas de sintaxis para la colocación de puntos suspensivos
El la ubicación del token "..." determina su función:
Ejemplo: Plantilla variada con "..."
Considere la siguiente plantilla variada:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
En este ejemplo, "..." sirve como un paquete de argumentos, mientras que "..." en la implementación de la función descomprime los argumentos en la variable args.
Motivo de la diferente ubicación de los puntos suspensivos
La diferencia en la ubicación de los puntos suspensivos entre la lista de argumentos de la plantilla y la lista de parámetros se debe a la distinción entre empaquetado de argumentos y desempaquetado de parámetros. En la lista de argumentos de la plantilla, "..." significa que los parámetros deben empaquetarse en un único paquete de parámetros, mientras que en la lista de parámetros, "..." indica que los argumentos deben descomprimirse en parámetros individuales.
Patrones de desempaquetado
Cuando "..." aparece en el lado derecho de una expresión como un desempaquetador, sigue un patrón específico:
Uso avanzado: inicialización de matrices
Los puntos suspensivos también se pueden usar para inicializar matrices:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
Esto inicializa el vector v con valores donde cada elemento es una estructura que contiene un par de argumentos y sizeof(T).
En conclusión , el token "..." en el contexto de plantillas variadas sirve como paquete de argumentos y desempaquetador de parámetros, siguiendo reglas de sintaxis específicas para patrones de colocación y desempaquetado. Su uso flexible permite la creación y personalización de plantillas potentes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3