有人可以解释为什么这不起作用吗?
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
类型定义为unsigned short
. 为什么当底层类型具有特化时使用默认模板?
编辑:好的,所以我错了它是类型定义的。Intellisense 向我展示了其他东西。我的跨平台和代理问题仍然存在。
这给了我一个曲线球,因为我想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; };