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

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

Mary-Kate Olsen
リリース: 2024-11-27 21:34:12
オリジナル
210 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート