"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você usa o token \"...\" para empacotar e descompactar argumentos em modelos variados C++?

Como você usa o token \"...\" para empacotar e descompactar argumentos em modelos variados C++?

Publicado em 2024-11-16
Navegar:486

How do you use the \

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:

  • Pack: Quando aparece no lado esquerdo de um nome, "..." indica um pacote de argumentos : ...thing // pack
  • Unpack: Quando aparece no lado direito de uma expressão, "..." descompacta um parâmetro de modelo pack: thing... // descompacte

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:

  • O expressão à esquerda de "..." é repetida, separada por vírgulas
  • Cada repetição representa uma expressão que consome um único elemento do pacote de parâmetros do modelo

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.

Tutorial mais recente Mais>

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