我正在寻找一个Boost :: type_traits精神的模板元程序,它将返回编译器是大端还是小端.有点像is_big_endian<T>.我怎么写这个?
使用它是通过基于字节序实现特定的模板特化来创建一个自动适应环境的库.例如,
template<>
void copy_big_endian_impl<true>(T *dst, const T *src, size_t sz) {
// since already big endian, we just copy
memcpy(dst, src, sz*sizeof(T));
}
template<>
void copy_big_endian_impl<false>(T *dst, const T *src, size_t sz) {
for (int idx=0; idx<sz; idx++)
dst[idx] = flip(src[idx];
}
Run Code Online (Sandbox Code Playgroud)
这将允许is_big_endian作为模板参数传递.
如果您使用 gcc (或 clang),则可以使用预处理器变量__BYTE_ORDER__:
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
// little endian stuff
#else
// big endian stuff
#endif // __BYTE_ORDER__
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |