4

我似乎找不到合适的语法来专门处理这个模板:

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> {...

这会产生错误。

请问有人可以提供正确的语法来专门化模板和实例化专门版本的语法吗?

4

2 回答 2

1

我认为您的代码应该如下所示:http: //ideone.com/cvGy3

您需要为类实例化定义所有类型。

于 2011-07-18T13:23:52.760 回答
0

错误是您正在重新定义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>
{...

我认为后一种选择是最好的。

于 2011-07-18T12:50:26.933 回答