3
関数シグネチャでstd :: enable_ifを避ける必要があるのはなぜですか
スコットマイヤーズは、彼の次の本EC ++ 11の内容とステータスを投稿しました。この本の1つの項目は、「std::enable_if関数のシグネチャでの回避」である可能性があると書いています。 std::enable_if 関数の引数として、戻り値の型として、またはクラステンプレートまたは関数テンプレートのパラメーターとして使用して、関数またはクラスをオーバーロードの解決から条件付きで削除できます。 で、この質問すべての3つの解決策を示しています。 関数パラメーターとして: template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< std::is_same<U, int>::value >::type* = 0) { return 42; } template<typename U = T> U read(typename std::enable_if< std::is_same<U, double>::value >::type* = 0) { return 3.14; } }; テンプレートパラメータとして: template<typename T> struct Check2 …