Как специализировать сложный шаблон с наследованием - C ++ - PullRequest
4 голосов
/ 18 июля 2011

Я не могу найти правильный синтаксис, чтобы специализировать этот шаблон:

template <class Object, class Var, class Invert, class Step = Var, unsigned int FIXED = IW_GEOM_POINT>
class TSin : public BasicTween<Object, Var> {...

Я хочу сохранить <Object> в качестве параметра шаблона, но специализировать все остальные параметры. Я пытаюсь это так:

    template <class Object>
class TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> {...

Это дает ошибки.

Может кто-нибудь предоставить правильный синтаксис для специализации шаблона и синтаксис для создания специализированной версии?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Я думаю, что ваш код должен выглядеть следующим образом: http://ideone.com/cvGy3

Вам необходимо определить все типы для создания экземпляров класса.

0 голосов
/ 18 июля 2011

Ошибка в том, что вы переопределяете class TSin. Я не думаю, что вы можете сделать это.

То, что вы можете сделать, это объявить универсальный шаблон и специализировать определения класса:

template <class Object, class Var, class Invert, class Step = Var, 
    unsigned int FIXED = IW_GEOM_POINT>
    class TSin;
template <class Object>
    class TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT> {...

или специализируйте определения членов класса:

template <class Object>
void TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT>::Foo(...) {...

или объявить подкласс:

template <class Object, class Var, class Invert, class Step = Var, 
    unsigned int FIXED = IW_GEOM_POINT>
    class TSin : public BasicTween<Object, Var> {...
template <class Object>
    class SpecialTSin::public TSin<Object, CIwVec2, int, CIwVec2, IW_GEOM_POINT>
{...

Я думаю, что последний вариант является лучшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...