ホームページ >バックエンド開発 >C++ >C マクロを使用してオプションのオーバーロードされたパラメーターを作成するにはどうすればよいですか?

C マクロを使用してオプションのオーバーロードされたパラメーターを作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-27 21:34:12211ブラウズ

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

C マクロによるオプションのオーバーロードされたパラメーター

概要

C マクロは便利なメソッドを提供しますコードの再利用とパラメータ化のため。ただし、デフォルトでは、マクロはオプションのパラメータまたはオーバーロードされたパラメータを処理できません。この記事では、この制限を克服する手法について説明します。

解決策

次のマクロベースのアプローチにより、オプションのオーバーロードされたパラメーターが可能になります。

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

使用法

このマクロベースのソリューションは、主に 2 つの機能を提供します。利点:

  • オプションのパラメータ: 必須パラメータのみを指定でき、不足しているパラメータはデフォルトで適切な値になります。
  • オーバーロード: パラメータの数に基づいて、異なるバージョンの PrintString 関数を呼び出すことができます

PRINT_STRING マクロは次のように使用できます。

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

実装の詳細

このソリューションでは、いくつかの手法が使用されます。

  • 引数カウント: マクロ __VA_ARGS__ は、マクロ引数のカンマ区切りリストを提供します。 GET_4TH_ARG マクロは、引数の数をカウントし、適切な PrintString 関数オーバーロードを選択するために使用されます。
  • 再帰マクロ呼び出し: PRINT_STRING_MACRO_CHOOSER マクロは、引数の数に基づいて、PrintString の適切なオーバーロードを再帰的に呼び出します。引数。

以上がC マクロを使用してオプションのオーバーロードされたパラメーターを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。