我想根据给定类型的属性更改模板函数的返回类型。有没有可能做这样的事情,可能有部分专业化(一个用于酷T,一个用于非酷)?
template<typename T, typename ret = T::IsCool ? int : float>
inline ret get() {}
(始终保证,T具有bool
属性IsCool
。)
答案 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() {}