帮助我“部分专业化中不使用的模板参数”
|
我一直在努力使用非C ++ 0x代码,但使用常规C ++。不要问我为什么我必须使用常规C ++,这只是一种愚蠢的要求。
所以这就是问题:关于某个语句是对还是错,我需要在枚举中获取一个值为1或0的值。
因此,当然,我在枚举中模板化了一个包含0的结构,并用第二个语句对其进行了专门化,其中该枚举包含1而不是0。
对我来说似乎很合法,但是它告诉我应该使用专业化的参数。这有点奇怪,因为我试图以所有可能的方式使用它,并且它只会不断弹出此错误。
这是代码:
template<typename T>
struct CanPrint
{
template<size_t>
struct Value { enum { val = 0 }; };
template<size_t>
struct Value<sizeof(True)> { enum { val = 1 }; };
enum
{ value = Value<sizeof(IsTrue<T>(0))>::val };
};
我敢打赌,如果不是部分专业化的话,这将是可行的,但是显式的专业化不能在命名空间范围内进行。而且,显然,如果不对模板和模板进行专门化处理,就无法对模板进行专门化处理。我可以吗 ?
没有找到相关结果
已邀请:
2 个回复
吞睫素
顺便说一句,如果
不是模板参数,它不是部分专业化的。它是完全专业化的。 而且由于这是完全专业化的,因此您不能在类内部(即在类范围内)定义它。完全专业化只能在命名空间范围内定义。因此,在名称空间范围内定义
以及专业化。 或者,您可以改为执行以下操作:
参见在线演示:http://www.ideone.com/MSG5X
课刊灭似
您仅列出部分专业化的参数:
不适用于全部专业: