模板定义中的条件

Pau*_*oob 3 c++ templates return-type partial-specialization

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

template<typename T, typename ret = T::IsCool ? int : float>
inline ret get() {}
Run Code Online (Sandbox Code Playgroud)

(总是保证,T bool有财产IsCool.)

Bat*_*eba 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() {}
Run Code Online (Sandbox Code Playgroud)

C++ 14

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