帮我解决"template parameters not used in partial specialization"
Help me with "template parameters not used in partial specialization"
我一直在努力使用非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 };
};
我敢打赌,如果不是部分专业化,这会起作用,但显式专业化不能在命名空间范围内。很明显,如果不专门化两个模板,我就无法在模板中专门化一个模板。我可以吗?
template<> //<---- leave it empty
struct Value<sizeof(True)> { enum { val = 1 };
顺便说一句,如果True
不是模板参数,它就不是部分专业化。它是完全专业化的。
由于这是完全专业化的,您不能在类内部定义它,即在类范围内。完全专业化只能在命名空间范围内定义。因此,在名称空间范围内定义Value
,主要的和专门化的。
或者,你可以这样做:
template<typename T>
struct CanPrint
{
//modified
template<typename U, size_t N = sizeof(U)>
struct Value { enum { val = 0 }; };
//modified - now its partial specialization
template<typename U>
struct Value<U, sizeof(True)> { enum { val = 1 }; };
enum { value = Value<IsTrue<T> >::val }; //modified here as well
};
查看在线演示:http://www.ideone.com/MSG5X
template<> // note the empty <>
struct Value<sizeof(True)> { enum { val = 1 }; };
您只列出部分专业化的参数:
template< typename T, typename U>
struct X;
template<typename U>
struct X<char,U> {...};
template<typename Z, typename U>
struct X<std::vector<Z>, U> {...};
不适用于完全专业化:
template<>
struct X<double,int> {...};
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- С 错误"s1, s2 are used uninitialised in this function"
- "constexpr"变量"used in its own initializer":Clang与GCC
- C++ 某些变量"used uninitialized in this function"。为什么?
- GCC - 删除"is used uninitialized in this function"警告
- 数组"not used in this scope" .为什么?
- 帮我解决"template parameters not used in partial specialization"