2017-01-09 17 views
0

我知道为什么模板的实现应该转到标题的原因。这个问题是关于模板专业化的。据我所知,这种设置应该工作。如何将模板构造函数特化移动到cpp文件?

头:

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)" ([email protected]@@[email protected]@Z) referenced in function _wmain 

我在做什么错了?是否有另一种方法将专门的构造函数移动到实现文件中?

+1

*我在做什么错?*在创建可执行文件时,您很可能不会编译和链接.cpp文件中的代码。 –

+0

感谢您的提示,但该文件包含在二进制文件中。 – lyron

+0

你是什么意思? –

回答

1

这看起来像我在Visual C++编译器中的错误,因为代码编译和链接并运行良好与MinGW g ++,但我不知道。

无论如何,以下变通办法头代码与Visual C++一起使用。

#pragma once 

template<class T> 
class Foo 
{ 
public: 
    Foo(T) 
    { 
     // not specialized 
    } 
}; 

template<> Foo<double>::Foo(double); 
template class Foo<double>; 
+0

感谢您的回答。解决方法很好地工作。 – lyron