比较班级template
专业化的程序是什么?该标准在这一点上没有详细说明(或者我错过了正确的地方)。
我的问题与决定在实例化期间使用什么专业无关。请不要对此发表评论。问题是关于相互比较专业化以确定特定专业化是否已经定义。
考虑这个示例代码:
template <class x1, class x2>
struct CoreTemplate { };
template <class x1, class x2>
struct CoreTemplate<x1*, x2*> { int spec; CoreTemplate() { spec = 1; } };
template <class x1, class x2>
struct CoreTemplate<x2*, x1*> { int spec; CoreTemplate() { spec = 2; } };
int main(int argc, char* argv[])
{
CoreTemplate<int*, int*> qq;
printf("var=%d.\r\n", qq.spec);
}
当我尝试使用 MSVC 编译此代码时,我在函数内部尝试实例化时收到错误消息main
:
cpptest1.cxx(15) : 错误 C2752: '
CoreTemplate<x1,x2>
' : 多个部分特化匹配模板参数列表
对我来说,尝试声明相同的模板特化时发出错误会更合乎逻辑。我看不出上面的专业有什么区别。
那么,有人知道比较模板专业化的规则吗?文章、链接、书籍等也会有所帮助。