2017-08-27 1 views
1

私はです。実際にはですが、この質問は恥ずかしいですが、結局テンプレートについてはわかりません。完全に特殊化されたテンプレートのコンストラクタの行外定義

だから私はこのスニペットを持っている:

、まあ、私はちょうどテンプレートクラス foo、クラス bar、コンストラクタを持つ専門 foo <bar>を持っている、と私は外にそのコンストラクタを定義したいと思います
template <typename> class foo; 
class bar; 

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

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

ライン。

この例のように見えるかもしれませんが、私はそれをコンパイルすることはできません。私はいつも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() 
{ 
} 
関連する問題