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 *が必要なように思えるので、私は混乱しています。バイトバッックではおかしくなります< 4>参照を使ってbyteswap <を呼び出す必要があります。templatizing byteswapping関数のヘルプは、パフォーマンスヒット?
これをきれいにするにはどうすればいいですか?ビット操作を直接行うようなパフォーマンスを実現するために(インライン展開やその他のトリックを使用して)可能ですか?
2つの先頭のアンダースコアを使用しないでください、それらは予約されています! – Simone
おい、フレッド、どこにいよう! – chriskirk
Hah;私はこれが2日間で3回目であったことを認識していませんでした。あなたの質問の1つにコメントして答えに移しました。 :) –