2010-11-21 13 views

答えて

2

タイプにXを特化しましたが、整数CompCriteria::ByeKeyAndValueと一緒に使用しようとしています。あなたはパラメータ化種類とパラメータ化のアイデアをconflatingている

enum CompCriteria{ByKey,ByValue,ByeKeyAndValue}; 

template<int> 
struct X; 

template<> 
struct X<ByeKeyAndValue> 
{ 
}; 

int main() 
{ 
    X<ByeKeyAndValue> x; 
    return 0; 
} 
+0

ありがとうございます。 –

2

あなたは= template<typename T>template<class T>を持っている場合は、Tは、よく、タイプことが期待されます。

enum CompCriteriaはタイプなので、そのテンプレートをインスタンス化できます。しかし、列挙型の単一の値は型ではないため、できません。

2
enum CompCriteria{ByKey,ByValue,ByeKeyAndValue}; 

template<CompCriteria crit_> 
struct X 
{ 
    static const CompCriteria crit = crit_; 
}; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    X<CompCriteria::ByeKeyAndValue> x; 
    return 0; 
} 
+0

@Someone_who_downwotedなぜこの答えが間違っているのですか?少なくとも、あなたはこの答えを落としてしまった理由を説明してください。私はこの答えが役に立つとAFAICそれは私が欲しいものだと私に+1。 –

+0

あなたの答えをありがとう - 私はそれを試してみた、それは私が欲しかったものです。本当にありがとう。 –

+0

@Alexey Malistov答えをありがとう。本当に有益な.. up-voted.Canあなたはこの行を言及できますか?テンプレートこれの背後にあるC++テンプレートルール? –

9

:次のように、この場合にはint -

あなたはenum CompCriteria基になる型のテンプレートクラスを特化することができます。テンプレートパラメータは、型または定数です。たとえば、次のように

template <typename T> 
struct Foo; 

template <int N> 
struct Foo; 

...対あなたが列挙型ではなく型より、定数 に基づいてテンプレートを専門にしたいように見えます。意味は、あなたが言う必要があります。

enum CompCriteria{ByKey,ByValue,ByeKeyAndValue}; 

template<CompCriteria> 
struct X; 

// Specialization for ByKeyAndValue 
// 
template<> 
struct X<ByeKeyAndValue> 
{ 
}; 

int main() 
{ 
    X<ByeKeyAndValue> x; // instantiate specialization 
    return 0; 
} 

また、あなたはnamespace演算子を使用して列挙型を参照することはできません。列挙型をカプセル化する場合は、ネームスペースにラップする必要があります。

namespace CompCriteria 
{ 
    enum type {ByKey,ByValue,ByeKeyAndValue}; 
} 
+0

ありがとう偉大な答え+1 –

関連する問題