2017-01-09 47 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