部分模板专门化导致"无效使用不完整类型"错误
时间:2020-03-06 15:03:22 来源:igfitidea点击:
如下代码:
template <typename S, typename T> struct foo { void bar(); }; template <typename T> void foo <int, T>::bar() { }
给我错误
invalid use of incomplete type 'struct foo<int, T>' declaration of 'struct foo<int, T>'
(我正在使用gcc。)我的部分专业化语法是否错误?请注意,如果我删除第二个参数:
template <typename S> struct foo { void bar(); }; template <> void foo <int>::bar() { }
然后它可以正确编译。
解决方案
我们不能部分专门化一个功能。如果希望对成员函数执行此操作,则必须对整个模板进行部分专业化处理(是的,这很烦人)。在大型模板类上,要部分专用于某个功能,我们需要一种解决方法。模板成员结构(例如template <typename U = T>嵌套结构)可能会起作用。否则,我们可以尝试从部分专业化的另一个模板中派生(如果我们使用
this-> member`表示法,则可以使用,否则会遇到编译器错误)。