"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 usar `std :: source_location` com funções de modelo variadico em c ++ 20?

Como usar `std :: source_location` com funções de modelo variadico em c ++ 20?

Postado em 2025-03-25
Navegar:735

How to Use `std::source_location` with Variadic Template Functions in C  20?

resolvendo os problemas de localização da fonte nas funções do modelo variadico

em C 20, captura de detalhes de contexto de chamada de função é possível com std :: source_location. No entanto, empregá -lo com funções de modelo variádico se mostrou desafiador devido ao posicionamento do parâmetro fonte_location. Isso dificultou o uso de std :: source_location devido aos seguintes motivos:

primeira tentativa:

  • modelo void Debug (args && ... args, const std :: source_location & loc = std :: source_location :: current ());

    falha porque os parâmetros variados devem residir no final. void Debug (const std :: source_location & loc = std :: fonte_location :: current (), Args && ... args);

    apresenta a ambiguidade para os chamadores, pois interrompe um parâmetro inesperado.
    template 
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());

    Solução: Abraçando as guias de dedução
  • Guia:
  • modelo Struct Debug { Debug (ts && ... ts, const std :: source_location & loc = std :: source_location :: current ()); }; Modelo Debug (TS && ...) -> Debug ;

    permite chamadas como:
    template 
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());
    int main () { Debug (5, 'A', 3.14f, "Foo"); }

  • Conclusão:

através da utilização de guias de dedução, os programadores C podem incorporar perfeitamente o STD :: Source_location nas funções de modelos variádicos para capturar a função de chamada Informações de contexto.

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