2017-08-27 59 views
1

我是真的慚愧地問這個問題,但看起來我對模板一無所知。完全專用模板中構造函數的線外定義

所以我有這樣的片段:

template <typename> class foo; 
class bar; 

template <> class foo <bar> 
{ 
public: 
    foo(); 
}; 

template <> foo <bar> :: foo() 
{ 
} 

哪裏,好,我只是有一個模板類foo,一類bar,專業化foo <bar>有一個構造函數,我想定義構造出來的線。

儘管這個例子可能看起來很微不足道,但我無法得到它,我總是得到No function template matches function template specialization 'foo'

如果我添加一個虛擬參數,以便模板不是完全專用的(例如template <bool dummy> foo <bar, dummy> :: foo()),它可以很好地工作。我錯過了什麼?

+1

'模板<> FOO :: foo的()' - >'FOO :: foo的()'。你並沒有專門化任何東西,你正在定義一個先前聲明的實體。 – StoryTeller

+0

D'oh。它確實有道理。謝謝。 –

回答

1

可以使用普通成員定義語法定義完整類模板專業化的成員。這不是模板的定義,因此不能指定template<>前綴。

它只是改變

foo <bar> :: foo() 
{ 
} 
相關問題