如何专门化具有继承的复杂模板- c++

How to specialize a complex template with inheritance - C++

本文关键字:复杂 c++ 继承 专门化      更新时间:2023-10-16

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

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

给出错误。

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

我认为你的代码应该是这样的:http://ideone.com/cvGy3

你需要为类的实例化定义所有的类型

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

我认为后者是最好的选择。