私は型特性を作成して特定のクラスに特化する方法を理解していますが、私の場合はクラステンプレートを専門にしたいと思います。以下のコードはコンパイルされませんが、ユーザーがMyTemplatisedTypeで使用することを決定したタイプのMyTemplatisedClassのTraitの特殊化が機能するはずです。テンプレート化されたクラスのための形質の定義
class Traits
{
public:
static bool someProperty(void) { return false; }
};
template<typename Type>
class MyTemplatisedClass
{
};
template<typename Type>
template<>
class Traits< MyTemplatisedClass<Type> >
{
public:
static bool someProperty(void) { return true; }
};
int main(int argc, char* argv[])
{
std::cout << Traits< MyTemplatisedClass<float> >::someProperty() <<std::endl; //This should be true
return 0;
}
これは可能ですか、それともあまりにも尋ねていますか?コンパイラによると、最初の問題は
error C2989: 'Traits' : class template has already been declared as a non-class template
ですが、これはどのように修正できますか?
それは私はそれがテンプレートではないクラスのために働く必要はありません任意の違いがあれば、テンプレート化されたものだけで大丈夫です。
編集:実際には、テンプレート化されたクラスとテンプレート化されていないクラスの両方で機能していればうれしいでしょう。
ありがとうございました。あなたはすべて正しい答えを与えましたが、私は1つしか受け入れることができません。私はUncleBensと一緒に提供された追加情報については行くつもりです。 – PolyVox
@UncleBens:両方のケースで例を挙げてもらえますか?私は、その違いが何であるか、あるいは1つの引数を持つ "any"テンプレートを特化することによって何を意味するのかをよく理解していません。 – Sarien