我一直在努力使用不是 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 };
};
我敢打赌,如果它不是部分专业化,那么它会起作用,但显式的不能在命名空间范围内。而且我显然不能在模板中专门化模板而不专门化它们。我可以吗 ?