2012-12-12 21 views
46

次のようなテンプレートクラスを考える:C++テンプレートクラスの宣言方法

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

どのように誰かが前方ヘッダファイルにこのクラスを宣言することができますか?

+12

これがなぜ閉鎖されたのか分かりません。リンクされた質問は似ていますが、異なっています。これは、 'std'名前空間のフォワード宣言テンプレートを扱います。この質問はより一般的なもので、最高の評価を得た回答が異なります。私は再開することに投票しました。 –

答えて

65

これは、あなたがそれを行うだろうかです:デフォルトは前方宣言ではなく、実際の定義であることを

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings; 

template<typename Type, typename IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

注意。

6

テンプレートのデフォルトの引数は、テンプレートの最初の宣言に対してのみ宣言できます。ユーザーがクラステンプレートを宣言できるようにするには、転送ヘッダーを指定する必要があります。デフォルトを使って誰かのクラステンプレートを宣言したい場合は、運が悪いです!