template<int size>
inline void* byteswap(void* __x);
template<>
inline void* byteswap<2>(void* __x)
{
return (*(uint16*)__x >> 8) | (*(uint16*)__x << 8);
}
template<>
inline void* byteswap<4>(void* __x)
{
return (byteswap<4>(__x & 0xffff) << 16) | (bswap_16 (__x >> 16));
}
template<typename T>
inline T byteswap(T& swapIt)
{
return (T*)byteswap<sizeof(T)>(swapIt);
}
int main() {
uint32 i32 = 0x01020304;
uint16 i16 = 0x0102;
byteswap(i32);
byteswap(i16);
return 0;
}
以上显然甚至没有编译。我很困惑,因为看起来我需要void *作为函数的参数,而且事情有点让人难以接受,当我需要调用byteswap < 2>但带有引用时。帮助模板化byteswapping功能,性能如何?
任何想法如何让这看起来很漂亮?它是否有可能实现(使用内联或其他技巧)使其像直接执行位操作一样具有性能?
不要使用两个前导下划线,它们是保留的! – Simone 2011-02-03 14:35:59
哥们,弗雷德,你到处都是! – chriskirk 2011-02-03 14:46:53