Я понимаю, как создавать черты типа, а затем специализироваться на конкретном классе, но в моем случае я хотел бы специализироваться на шаблоне класса. Приведенный ниже код не компилируется, но идея состоит в том, что специализация Traits для 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
Что правильно, но как это исправить? Если это имеет какое-то значение, мне не нужно, чтобы это работало для классов без шаблонов, достаточно только шаблонов. Редактировать: На самом деле было бы неплохо, если бы это работало для как шаблонные, так и не шаблонные классы.