2017-06-02 9 views
3

テンプレート関数の戻り値の型を、指定した型のプロパティに応じて変更したい。このようなことをする可能性はありますか?おそらく、部分的な専門化(クールなTとクールなもののためのもの)であろうか?テンプレート定義内の条件

template<typename T, typename ret = T::IsCool ? int : float> 
inline ret get() {} 

(常にTはboolプロパティIsCoolを持っていることを、保証されている。)

+2

ます。http://en.cppreference

は、あなたがそうのようにそれを使用することができますhttp://en.cppreference.com/w/cpp/types/conditional

を参照してください。 com/w/cpp/types/conditional – nwp

+0

@nwpあなたは答えを下の回答ボックスに入れるはずです。 – Rakete1111

+1

@ Rakete1111私は、リンクのみの回答は答えではないという印象を受けましたが、何かテキストを追加して1つにしてください。 – nwp

答えて

7

あなたはこれを達成するためにstd::conditionalを使用することができます。

C++ 11

template<typename T, typename ret = std::conditional<T::IsCool, int, float>::type> 
inline ret get() {} 

C++ 14

template<typename T, typename ret = std::conditional_t<T::IsCool, int, float>> 
inline ret get() {}