C++ 如何将模板构造函数专用化移动到cpp文件?
我知道为什么模板的实现应该转到页眉。这个问题是关于模板专门化的。据我所知,这个设置应该可以工作 标题:C++ 如何将模板构造函数专用化移动到cpp文件?,c++,templates,constructor,template-specialization,C++,Templates,Constructor,Template Specialization,我知道为什么模板的实现应该转到页眉。这个问题是关于模板专门化的。据我所知,这个设置应该可以工作 标题: template<class T> class Foo { public: Foo(T value) { // not specialized } }; template<> Foo<double>::Foo(double value); 模板 福班{ 公众: Foo(T值){ //不专业 } }; 模板Foo::Foo(双值);
template<class T>
class Foo {
public:
Foo(T value) {
// not specialized
}
};
template<> Foo<double>::Foo(double value);
模板
福班{
公众:
Foo(T值){
//不专业
}
};
模板Foo::Foo(双值);
cpp:
//浮点的专门化
样板
Foo::Foo(双值){
//双人专用版
}
用法:
Foo<double>(0);
Foo(0);
但是,我得到一个编译器错误:
error LNK2019: unresolved external symbol "public: __thiscall Foo<double>::Foo<double>(double)" (??0?$Foo@N@@QAE@N@Z) referenced in function _wmain
错误LNK2019:未解析的外部符号“public:u thiscall Foo::Foo(double)”(?0$Foo@N@@QAE@N@Z) 在函数\u wmain中引用
我做错了什么?是否有另一种方法将特殊的构造函数移到实现文件? ,这看起来像VisualC++编译器中的一个bug,因为代码编译和链接并用MinGW g ++运行,但我不确定。
无论如何,下面的工作区头代码与VisualC++ ++一起工作。
#pragma once
template<class T>
class Foo
{
public:
Foo( T )
{
// not specialized
}
};
template<> Foo<double>::Foo( double );
template class Foo<double>;
#pragma一次
样板
福班
{
公众:
傅(T)
{
//不专业
}
};
模板Foo::Foo(双);
模板类Foo;
我做错了什么?在创建可执行文件时,您很可能没有编译和链接.cpp文件中的代码。谢谢您的提示,但该文件包含在二进制文件中。这是什么意思?我的意思是,我选中了,该文件被编译并链接到可执行文件中。所以这不是问题,这看起来像VisualC++编译器中的一个bug。使用MingW g++编译和链接,然后调用该构造函数。
#pragma once
template<class T>
class Foo
{
public:
Foo( T )
{
// not specialized
}
};
template<> Foo<double>::Foo( double );
template class Foo<double>;