Я понимаю, как создавать черты типа, а затем специализироваться на определенный класс, но в моем случае я хотел бы специализироваться на шаблоне класса. Код ниже не компилируется, но идея состоит в том, что специализация 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
Это правильно, но как я могу это исправить?
Если это имеет какое-то значение, мне не нужно, чтобы он работал на нетемплифицированных классах, просто шаблонизированные были в порядке.
Редактировать: На самом деле было бы неплохо, если бы оно работало как для templatised, так и для non tem tematatised классов.
Спасибо, ребята, вы все дали правильный ответ, но я могу только принять его. Я собираюсь пойти с UncleBens за дополнительной информацией. – PolyVox
@UncleBens: Могли бы вы представить примеры для обоих случаев. Я не совсем понимаю, в чем разница или что вы подразумеваете, специализируясь на «любом» шаблоне с одним аргументом. – Sarien