我真的羞于提出这个问题,但看起来我对模板一无所知。
所以我有这个片段:
template <typename> class foo;
class bar;
template <> class foo <bar>
{
public:
foo();
};
template <> foo <bar> :: foo()
{
}
在哪里,我只有一个模板类foo
,一个类bar
,一个带有构造函数的特化foo <bar>
,我想要将该构造函数定义为行。
尽管这个例子可能看似微不足道,但我无法编译它,而且我总是得到No function template matches function template specialization 'foo'
。
如果我添加一个虚拟参数,以便模板不是完全专业化的(例如template <bool dummy> foo <bar, dummy> :: foo()
),它可以很好地工作。我错过了什么?
答案 0 :(得分:1)
可以使用普通成员定义语法定义完整类模板特化的成员。这不是模板的定义,因此无法指定template<>
前缀。
只需将其更改为
即可foo <bar> :: foo()
{
}