C++11 type_traits : same type if floating point, double 如果是整型

标签 c++ c++11 typetraits

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

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

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

最佳答案

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先检查一下。在此处查看其他有用的类型特征:

关于C++11 type_traits : same type if floating point, double 如果是整型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044364/

相关文章:

c++ - 将 std::sort 限制为随机访问迭代器

c++ - 是否可以定义一个包含函数和 lambda 的可调用概念?

c++ - 转发声明映射的映射类型和 C++11

c++ - 将字符串反转到一定长度

c++ - 检查有效图像

c++ - 使用 bind 或 lambda 将 NULL 函数指针传递给类构造函数

c++ - 初始化列表中积分提升的规则是什么?这是 GCC 还是 C++ 限制中的误报警告?

c++ - 在 VS2010 中使用 lambda 函数作为函数指针时遇到问题

c++ - std::make_shared() 是否使用自定义分配器?

c++ - 这个 result_of 用法有什么问题?