Maison >développement back-end >C++ >Comment créer des paramètres facultatifs et surchargés avec des macros C ?

Comment créer des paramètres facultatifs et surchargés avec des macros C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-27 21:34:12152parcourir

How Can You Create Optional and Overloaded Parameters with C   Macros?

Paramètres facultatifs et surchargés avec les macros C

Introduction

Les macros C fournissent une méthode pratique pour la réutilisation et le paramétrage du code. Cependant, par défaut, les macros ne peuvent pas gérer les paramètres facultatifs ou surchargés. Cet article explore une technique pour surmonter cette limitation.

Solution

L'approche basée sur les macros suivante permet des paramètres facultatifs et surchargés :

#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)

#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
#define PRINT_STRING_MACRO_CHOOSER(...) \
    GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \
                PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, )

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

Utilisation

Cette solution basée sur des macros fournit deux principaux avantages :

  • Paramètres facultatifs : Vous pouvez spécifier uniquement les paramètres requis, et les paramètres manquants prendront par défaut les valeurs appropriées.
  • Surcharge : Différentes versions de la fonction PrintString peuvent être invoquées en fonction du nombre de paramètres transmis.

Vous pouvez utiliser la macro PRINT_STRING comme suit :

PRINT_STRING("Hello, World!"); // No size or style specified
PRINT_STRING("Hello, World!", 18); // Size specified
PRINT_STRING("Hello, World!", 18, bold); // Size and style specified

Détails d'implémentation

Cette solution utilise plusieurs techniques :

  • Comptage d'arguments : La macro __VA_ARGS__ fournit une liste d'arguments de macro séparés par des virgules. La macro GET_4TH_ARG est utilisée pour compter le nombre d'arguments et sélectionner la surcharge de fonction PrintString appropriée.
  • Appels de macro récursifs : La macro PRINT_STRING_MACRO_CHOOSER appelle récursivement la surcharge appropriée de PrintString en fonction du nombre de arguments.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn