模板定义中的条件

Condition in Template Definition

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

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

(总能保证,T 有 bool 属性 IsCool。)

您可以使用 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() {}