完全专用模板中构造函数的外部定义

时间:2017-08-27 12:37:20

标签: c++ templates template-specialization

真的羞于提出这个问题,但看起来我对模板一无所知。

所以我有这个片段:

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()),它可以很好地工作。我错过了什么?

1 个答案:

答案 0 :(得分:1)

可以使用普通成员定义语法定义完整类模板特化的成员。这不是模板的定义,因此无法指定template<>前缀。

只需将其更改为

即可
foo <bar> :: foo()
{
}