我在.h文件中有这个类定义:
class PolygonPath
{
public:
template<class T> explicit PolygonPath(const Polygon<T> &);
template<class T> Polygon<T> toPolygon() const;
}
在.cpp文件中,我定义了我的方法。然后,我想为
Polygon<float>
和Polygon<long>
定义显式模板。所以,我这样定义它们:template class PolygonPath::PolygonPath<float>(const Polygon<float> &); //Fail
template class Polygon<float> PolygonPath::toPolygon<float>() const; //Ok
template class PolygonPath::PolygonPath<long>(const Polygon<long> &); //Fail
template class Polygon<long> PolygonPath::toPolygon<long>() const; //Ok
对于构造函数,我无法定义显式模板专业化。编译时出现以下错误:“错误:'PolygonPath'不是类模板”。
我也尝试使用以下语法:
template <> PolygonPath::PolygonPath(const Polygon<float> &)
它可以编译,但是在链接上出现另一个错误:“对`urchin :: PolygonPath :: PolygonPath(urchin :: Polygon const&)'的未定义引用”。
最佳答案
从构造函数的显式实例中删除class
。template PolygonPath::PolygonPath<long>(const Polygon<long> &);
和template Polygon<long> PolygonPath::toPolygon<long>() const;
关于c++ - 构造函数的显式模板特化(G++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52651035/