だから、関数の引数としてのstd :: enable_if:SFINAEは:、私はこのウェブページ上のどこかのコードによって設定された例以下のよ
template<typename T>
void fun(const typename std::enable_if_t<std::is_integral<T>::value, T>& val) {
std::cout << "fun<int>";
}
template<typename T>
void fun(const typename std::enable_if_t<std::is_floating_point<T>::value, T>& val) {
std::cout << "fun<float>";
}
int main()
{
fun(4);
fun(4.4);
}
この方法は:ここでは http://eli.thegreenplace.net/2014/sfinae-and-enable_if/
は、私が持っているものです私は書く必要があります:
fun<int>(4);
fun<double>(4.4);
どうしたらいいですか?
コンパイラは、パラメータT
を推論できないと訴えます。
です。しかし、それは戻り値の型を持たないコンストラクタでどのように動作しますか? – DeiDei
@DeiDei更新を参照してください –
'std :: enable_if'の第2引数として' int'を使うことの意義は何ですか?それは恣意的ですか?または、 'int = 0'が安全であるからでしょうか? – Jacob