#include <iostream>
using namespace std;
template <class X, class Y>
Y big(X a, Y b)
{
if (a > b)
return (a);
else return (b);
}
int main()
{
cout << big(32.8, 9);
}
ここではCPPでテンプレートを使用しているので、big
およびdouble
タイプの引数をバイパスして関数int
を呼び出すと、double
である返答が必要です。ここの型は、32
ではなく32.8
を返します。
希望する出力を取得するにはどうすればよいですか? big
関数の適切な戻り値の型を記述する方法?
これは、おそらくあなたの正確な状況に対する正しい解決策ではありません。他の答えは、あなたが望むものに非常に近い可能性があります。
ただし、reallyが何らかの理由で実行時に完全に異なる型を返す必要がある場合、正しい解決策(- c ++ 17 =)は std::variant
、これは一種のタイプセーフな共用体です。
#include <variant>
template <typename X, typename Y>
std::variant<X, Y> max(X a, Y b) {
if (a > b)
return std::variant<X, Y>(std::in_place_index_t<0>, a);
else
return std::variant<X, Y>(std::in_place_index_t<1>, b);
}
その場合、責任は呼び出し側が戻り値を処理することであり、おそらく std::visit
など。