如何检查两个整数类型是否相等
How to check that two integer typedefs are equivalent?
我正在使用一些对整数类型有自己定义的库。如何检查两个类型定义是否为等效类型?我在另一个问题中问如何检查两个类型是否相同。但是,假设int和long int在我的编译器上都是32位,并且两个库可能分别使用它们。我希望检查报告int的typedef和长int的typedef是相同的这个编译器(也许不是另一个)。谢谢。
这和另一个问题不一样。另一个问题的解决方案是(int)和(long int)无法通过检查,即使它们都是32位的。现在我想让他们通过这张支票。
我自己想出了这个解决方案。我现在只关心整数,但更通用的解决方案将受到赞赏。任何的反馈吗?谢谢。
#include <limits>
using namespace std;
typedef unsigned long long UINT64;
typedef unsigned long long UINT_64;
typedef unsigned int UINT_32;
typedef unsigned long int UINT32;
template<bool> struct static_assert;
template<> struct static_assert<true> {};
#define CHECK_INTEGER_TYPES(T, U) (numeric_limits<T>::is_specialized && numeric_limits<U>::is_specialized && numeric_limits<T>::is_integer && numeric_limits<U>::is_integer && (numeric_limits<T>::is_signed == numeric_limits<U>::is_signed) && (numeric_limits<T>::digits == numeric_limits<U>::digits))
int main()
{
static_assert<(CHECK_INTEGER_TYPES(UINT64, UINT_64))>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT64, UINT64)>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT64, UINT_32)>(); // fail
static_assert<CHECK_INTEGER_TYPES(UINT32, UINT32)>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT32, UINT_32)>(); // pass
}
相关文章:
- 将超出范围的整数分配给有符号字符类型
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 在 c++ 中,能够将浮点类型加 1 的最大整数是多少?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 比较两个整数在C++中与未知 int 类型的相等性
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 通过编译时值推断整数的类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 有没有办法将字符类型转换为整数?
- C++,概念不适用于无符号整数作为结果类型?
- 如何将整数分配给 char 类型的变量
- 类型转换问题:返回为整数而不是浮点/类型
- 涉及旧式枚举和整数类型的重载解析
- 将字符串转换为整数类型T,检查是否存在溢出
- 如何判断 c++ 向量中的值类型(整数或双精度)?
- 在 C/C++ 中,混合类型整数数学所需的最小类型向上转换是多少?
- 如何将字节数组转换为整数类型(整数、长整型、短型等)"安眠安"?
- 我可以在C++中制作一个强类型整数吗?