模板定义中的条件

时间:2017-06-02 12:38:44

标签: c++ templates return-type partial-specialization

我想根据给定类型的属性更改模板函数的返回类型。有没有可能做这样的事情,可能有部分专业化(一个用于酷T,一个用于非酷)?

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

(始终保证,T具有bool属性IsCool。)

1 个答案:

答案 0 :(得分:7)

您可以使用std::conditional来实现此目标。

请参阅http://en.cppreference.com/w/cpp/types/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() {}