C での戻り値に基づく関数のオーバーロード
パラメーターに基づいて関数をオーバーロードすることは、C では一般的な方法です。ただし、戻り値に基づいたオーバーロードも可能で、戻り値の使用方法に応じて異なる動作をする関数を作成できます。
これを実現するには、いくつかの方法があります。
呼び出しの明示的な型指定
関数に渡されるリテラルには異なる型を使用します。たとえば、使用法に応じて整数または文字列を返す関数の場合:
int mul(int, int); std::string mul(char, int); int n = mul(6, 3); // Function called with int return value std::string s = mul('6', 3); // Function called with string return value
ダミー ポインター アプローチ
各関数にダミー ポインター パラメーターを追加します。コンパイラは戻り値に基づいて正しいバージョンを選択します。 type:
int mul(int*, int, int); std::string mul(std::string*, char, int); int n = mul((int*)NULL, 6, 3); // Function called with int return value std::string s = mul((std::string*)NULL, '6', 3); // Function called with string return value
戻り値のテンプレートの特殊化
テンプレート関数を作成し、特定の戻り値の型に特化します:
template<typename T> T mul(int, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> int mul<int>(int, int) { return i * j; } template<> std::string mul<std::string>(int, int) { return std::string(j, static_cast<char>(i)); } int n = mul<int>(6, 3); // Function called with int return value std::string s = mul<std::string>('6', 3); // Function called with string return value
このメソッド回避するには、関数を呼び出すときに戻り値の型を明示的に指定する必要があります。あいまいさ。
複数のパラメータによるテンプレートの特殊化
同じ戻り値の型の異なるパラメータに基づいてオーバーロードするには、パラメータの組み合わせごとに個別のテンプレートを作成します。
template<typename T> T mul(int, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> int mul<int>(int, int) { return i * j; } template<typename T> T mul(char, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> std::string mul<std::string>(char, int) { return std::string(j, static_cast<char>(i)); } int n = mul<int>(6, 3); // n = 18 std::string s = mul<std::string>('6', 3); // s = "666"
これらの手法を使用すると、戻り値に基づいて関数を効果的にオーバーロードでき、より汎用性と柔軟性が高まります。コード。
以上がC 関数は戻り値に基づいてオーバーロードできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。