C ++ 11 type_traits:如果是浮点数则为相同类型,如果是整数类型则为double

时间:2012-08-20 20:06:44

标签: c++ c++11 typetraits

我有一个Type类型和一个变量tmp

template<typename Type> myFunction()
{
    /* SOMETHING */ tmp = 0;
};

如果tmp是浮点类型,我希望将Type声明为Type,如果double是整数类型,我希望Type。如何在C ++ 11中做到这一点?

2 个答案:

答案 0 :(得分:7)

typedef typename std::conditional<
     std::is_floating_point<T>::value, 
     T,                                //if floating, ::type = T
     double                            //else,        ::type = double
>::type value_type;

value_type tmp; //declare variable

我假设T只能是算术类型。如果需要,可以先使用std::is_arithmetic进行检查。请在此处查看其他有用的类型特征:

答案 1 :(得分:4)

查找并使用以下特征:

template <bool, class T, class F> struct conditional;
template <class T> struct is_integral;
template <class T> struct is_floating_point;

如果这样做不适合您,请发布您尝试过的内容以及生成的错误消息。