Regras de sintaxe para o token "..." em modelos Variádicos
Em C , os modelos variados permitem a construção de modelos que aceitam um número variável de argumentos. O token "..." desempenha um papel crucial neste contexto, servindo como um pacote de argumentos ou um descompactador de parâmetros.
Regras de sintaxe para posicionamento de reticências
As a colocação do token "..." determina sua função:
Exemplo: modelo variádico com "..."
Considere o seguinte modelo variádico:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
Neste exemplo, "..." serve como um pacote de argumentos, enquanto o "..." na implementação da função descompacta os argumentos na variável args.
Razão para o posicionamento diferente das reticências
A diferença no posicionamento das reticências entre a lista de argumentos do modelo e a lista de parâmetros é devido à distinção entre empacotamento de argumentos e descompactação de parâmetros. Na lista de argumentos do modelo, "..." significa que os parâmetros devem ser compactados em um único pacote de parâmetros, enquanto na lista de parâmetros, "..." indica que os argumentos devem ser descompactados em parâmetros individuais.
Padrões de descompactação
Quando "..." aparece no lado direito de uma expressão como um descompactador, ele segue um padrão específico:
Avançado Uso: inicializando matrizes
Reticências também podem ser usadas para inicializar matrizes:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
Isso inicializa o vetor v com valores onde cada elemento é uma estrutura contendo um args e um par sizeof(T).
Em conclusão , o token "..." no contexto de modelos variados serve tanto como um pacote de argumentos quanto como um descompactador de parâmetros, seguindo regras de sintaxe específicas para padrões de posicionamento e descompactação. Seu uso flexível permite construções e personalização poderosas de modelos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3