"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 posso simular parâmetros opcionais em macros C++?

Como posso simular parâmetros opcionais em macros C++?

Publicado em 15/11/2024
Navegar:992

How Can I Simulate Optional Parameters in C   Macros?

Macros com parâmetros variáveis ​​em C

Os parâmetros opcionais oferecem uma maneira conveniente de especificar parâmetros que possuem valores padrão, proporcionando flexibilidade para chamadas de função. Embora C não suporte nativamente parâmetros opcionais em macros, existem técnicas que podem simular esse comportamento.

Uma abordagem envolve o uso de um padrão de macro recursivo. Vejamos um exemplo:

#define PRINT_STRING(message, ...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

#define PRINT_STRING_1_ARGS(message) PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size) PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)

A macro PRINT_STRING recebe um número variável de argumentos. A macro PRINT_STRING_MACRO_CHOOSER usa uma lista de argumentos duas vezes: uma vez para determinar a macro auxiliar correta (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS ou PRINT_STRING_3_ARGS) com base no número de argumentos e novamente para passar os argumentos para a macro auxiliar selecionada.

Veja como usá-lo:

PRINT_STRING("Hello, World!");  // Defaults to no size or style
PRINT_STRING("Hello, World!", 18); // Specifies only size
PRINT_STRING("Hello, World!", 18, bold); // Specifies both size and style

Essa abordagem fornece parâmetros opcionais em macros, permitindo que o chamador especifique apenas os parâmetros necessários. No entanto, requer a definição de várias macros auxiliares, que podem se tornar detalhadas para um número maior de parâmetros opcionais.

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