我有一个大型代码库,其中包含使用 uint_fast64_t 作为索引类型的矩阵相关代码。为了使用GMM作为求解器后端,我需要从以下位置转换(转换!)向量:
std::vector<uint_fast64_t, std::allocator<uint_fast64_t>>
转 GMM 内部格式
std::vector<unsigned long long, std::allocator<unsigned long long>>
在 MSVC2012 下,uint_fast64_t 的类型定义为 unsigned long long,因此两个表达式“相同”。
我很清楚它们实际上不是同一类型,因为 unsigned long long 可能正好是 64 位长(长)(因为它是实现定义的),而 uint_fast64_t 至少是 64 位长。( --no-haters ;) )
可悲的是,GCC4.7 和 Clang 3.4 将 uint_fast64_t 称为内部类型,因此无法进行任何类型的强制转换。
此外,似乎在某些时候,clang 将 uint_fast64_t 解释为 unsigned long - 使其与 unsigned long long 定义更加不兼容。
你从我的痛苦中看到了哪些方面?
我唯一的选择是手动替换 GMMs 代码中的 unsigned long long 吗?