これが機能しない理由を誰かが説明できますか?
template < typename T > struct tester { static const size_t value = 0; };
template <> struct tester< char > { static const size_t value = 1; };
template <> struct tester< unsigned short > { static const size_t value = 2; };
size_t nTest = tester< wchar_t >::value;
私のコンパイラでwchar_t
は、 として typedef されunsigned short
ます。基になる型に特殊化があるのに、既定のテンプレートが使用されるのはなぜですか?
編集:OK、だから私はそれが型定義されていることについて間違っていました。インテリセンスは私に何か他のものを見せていました。私のクロスプラットフォームであり、サロゲートの質問は残っています。
wchar_t
サイズに応じて作業したいので、これは私に変化球を投げました。
別の関連する質問。wchar_t
クロスプラットフォームで作業するにはどうすればよいですか? Windowsでは16ビットで、他の場所では32ビットになる可能性があることを私は知っています。32ビット型として定義されている場合、それは(コンパイラが強制するように)サロゲートペアを使用しないことを意味しますか?
このようなものは機能しますか?
template < typename T, size_t N = sizeof( wchar_t ) > struct remap;
template <> struct remap< wchar_t, 2 > { typedef unsigned short type; };
template <> struct remap< wchar_t, 4 > { typedef unsigned long type; };