2017-06-02 75 views
3

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

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

(它总是有保证的,那T具有bool财产IsCool

+2

HTTP://en.cppreference。 com/w/cpp/types/conditional – nwp

+0

@nwp你知道你应该把答案放在下面的答案框中,对吧? – Rakete1111

+1

@ Rakete1111我的印象是,只有链接的答案不是答案,但可以随意添加一些文本,并使其成为一体。 – nwp

回答

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() {}