我明白如何创建类型特征,然后专门针对特定类,但在我的情况下,我想专门为类模板。下面的代码不能编译,但是想法是Traits for MyTemplatisedClass的特化应该适用于用户决定使用MyTemplatisedType的类型。为模板化类定义特征
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
哪个是正确的,但我要如何解决这个问题?
如果它有什么区别,我不需要它为非模板类工作,只是模板化的类是好的。
编辑:事实上,如果它适用于模板化和非模板化的类,它会很好。
谢谢你们,你们都给出了正确的答案,但我只能接受一个。我将与UncleBens一起提供额外的信息。 – PolyVox 2011-12-22 16:22:43
@UncleBens:你能否提供这两种情况的例子。我不太了解区别是什么,或者通过使用一个参数专门化“任何”模板意味着什么。 – Sarien 2012-08-27 07:59:33