2012-04-25 10 views
1

何らかの理由で未定義テンプレートクラスをテンプレートパラメータとしてstd :: arrayに渡すことはできますか?それに似た何か:unspecializedテンプレートクラスを持つstd :: array

template <class T> 
class Field{ 
}; 

std::array<Field> a; 

または私はいくつかのbaseFieldの定義、およびIntField、StringField、FloatField ....としてそれをsublassする必要がありますか?

+9

いいえ、 'Field'は'フィールド 'と'フィールドは '型である、型ではありません。 –

答えて

1

std::arrayに異なるタイプを保持したい場合は、多態性によってのみ行うことができます。あなたは多形性を隠していながらそれを実装しているboost::anyを使うこともできます。

+2

「唯一」は少し強いです... – ildjarn

4

テンプレートをパラメータ(別名テンプレートテンプレートパラメータ)として使用するテンプレートを記述できます。テンプレートは、それを可能にするためのパラメータとしてテンプレートを取るように特別に書かれていなければならず、std::arrayはそのために指定されていません。

2

エイリアステンプレート使用して、C++ 11とかなり近い取得することができます:std::arrayがあまりにも大き用テンプレート引数を必要としていることを念頭に置いて

template <typename T> 
struct Field {}; 

template <typename T> 
using FieldArray5 = std::array<Field<T>,5>; 

int main() { 

    FieldArray5<int> a0; 

} 

しかし、クマを。