2012-03-19 9 views
0

のためにパラメータ化?テンプレートは、私はこれをしたい列挙型

template <enum T> class ATemplate {}; 

あなたが探していることはコンラートはに答え何でない限り、それはテンプレートのために有効な構文ではありませんので、私はこのエラー

error: use of enum ‘T’ without previous declaration 
+0

まあ、以前に宣言された列挙型のTですか? –

+0

あなたは 'class NetworkMsg:Message 'を意味しますか? – CapelliC

答えて

1

を取得します。

typenameまたはclassのいずれかを使用する必要があります。

次はそれを行う必要があります。

enum X 
{ 
    a 
}; 

template <typename T> class ATemplate {}; 

ATemplate<X> A; 
+0

[OK]を、私は他の型が引数として使用されている例を見たと思っていたが、今はそれらがかなり異なっていることを認識している(非型パラメータ) – nishantjr

+0

本当に。 'template 'はテンプレートが定義されているときに 'E' iという名前の列挙体がある場合には完全に有効です。しかし、それは無名のテンプレート引数をもたらすのであまり役に立ちません。 –

+0

はい、その場合、列挙型ではなく、列挙型の値を使用してインスタンス化されます(私は思う)。 'ATemplate sunday_obj; ' ATemplate days_obj対 ' ;' – nishantjr

2

enum Tが事前に宣言されている場合、それは動作します:

enum T { 
    foo, bar 
}; 

template <enum T> // or simply `template <T>` 
class ATemplate { }; 

int main() { 
    ATemplate<foo> x; 
} 

しかし、変数名Tから判断すると、これはあなたが望むものではありません。あなたが望むものを推測するのは難しいので、より具体的にする必要があります。

+0

質問が更新されました – nishantjr

関連する問題