C はパラメータの型に基づいた関数のオーバーロードをサポートしていますが、戻り値に基づいて異なる関数の実装を選択するという興味深い可能性も提供します。価値。これは、同じ入力が異なる目的の出力を生成する可能性があるケースを処理するための貴重なテクニックとなります。
提示されたユースケースでは、関数 mul があり、整数変数に代入される場合は整数、文字列変数に代入される場合は文字列。ただし、C ではこれを達成するために明示的な微分が必要です。
std::string s = mul(54, 3); // Proper conversion
別のアプローチには、関数シグネチャにダミー パラメーターを追加することが含まれます。必要な戻り値の型の NULL ポインターを渡すことで、コンパイラーに適切な関数を強制的に選択させることができます。
int mul(int* dummy, int i, int j) { return i*j; } std::string mul(std::string* dummy, char c, int n) { return std::string(n, c); } int n = mul(NULL, 6, 3); // Return integer std::string s = mul(NULL, 54, 3); // Return string
C テンプレートは戻り値の別のメソッドを提供します。過負荷。特定のテンプレートでインスタンス化しない限りコンパイルされないコードを含む「ダミー」関数を作成できます。
template<typename T> T mul(int i, int j) { const int k = 25 ; k = 36 ; } template<> int mul<int>(int i, int j) { return i * j ; } template<> std::string mul<std::string>(int i, int j) { return std::string(j, static_cast<char>(i)) ; }
必要に応じて、テンプレートベースのオーバーロードも可能です。さまざまな戻り値の特殊化に応じてさまざまなパラメータ タイプをサポートします:
template<typename T> T mul(int i, int j) {...} template<> int mul<int>(int i, int j) {...} template<> std::string mul<std::string>(char i, int j) {...}
これらの手法を利用することで、プログラマは関数を作成できます。期待される戻り値のタイプに基づいて異なる出力を提供します。
以上がC 関数は戻り値の型に基づいてオーバーロードできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。