我知道模板的实现应该转到标题的原因。这个问题是关于模板特化的。据我了解,此设置应该有效。
标题:
template<class T>
class Foo {
public:
Foo(T value) {
// not specialized
}
};
template<> Foo<double>::Foo(double value);
cpp:
// specialization for float
template<>
Foo<double>::Foo(double value) {
// special version for double
}
用法:
Foo<double>(0);
但是,我得到一个编译器错误:
error LNK2019: unresolved external symbol "public: __thiscall Foo<double>::Foo<double>(double)" (??0?$Foo@N@@QAE@N@Z) referenced in function _wmain
我做错了什么?是否有另一种方法可以将专用构造函数移至实现文件?
最佳答案
在我看来,这像是 Visual C++ 编译器中的错误,因为代码编译和链接并在 MinGW g++ 中运行良好,但我不确定。
无论如何,以下变通方法 header 代码适用于 Visual C++。
#pragma once
template<class T>
class Foo
{
public:
Foo( T )
{
// not specialized
}
};
template<> Foo<double>::Foo( double );
template class Foo<double>;
关于c++ - 如何将模板构造函数特化移动到 cpp 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542767/