【发布时间】:2018-10-28 00:18:05
【问题描述】:
我想实现一个比较两种类型(T1 和 T2)的两个变量的模板函数。这些类型是两种随机无符号或有符号整数类型。
为了能够正确比较它们,我需要将它们都转换为“更大”的整数类型 (T3)。不幸的是,有符号/无符号比较的提升规则总是提升为无符号类型。
那么如何在 C++11/C++14/C++17 中找到一个类型 T3,它涵盖了两个整数类型 T1 和 T2,无论它们的大小和符号是什么? 如果这不可能,是否有其他解决方案来构建基于模板的比较函数,该函数可以可靠地与任何整数组合一起工作?
【问题讨论】:
-
这种方法不适用于最大的类型,即如果
T1是最大的有符号类型,而T2是它的无符号类型。 -
比较是什么意思?绝对值?
-
@Escualo:你的代码是我想做的。但没有超载。我需要给我一个 T3 的代码,它可以包含 T1 和 T2 而不会损失精度。 common_type 不这样做。
标签: c++ templates comparison integer-promotion