是否有一个模板元程序来确定编译时编译器的字节顺序?

sep*_*sep 4 c c++ boost

可能重复:
有没有办法进行C++样式的编译时断言来确定机器的字节序?

我正在寻找一个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作为模板参数传递.

Set*_*son 5

有一个Boost头文件定义了一个可以使用的宏:boost/detail/endian.hpp.没有必要求助于模板元编程.


Bob*_*ers 3

如果您使用 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)