两种类型的模板专业化

时间:2013-02-26 16:26:21

标签: c++ templates c++11

我的类模板lerp()中有一个静态成员函数AnimCurve我想专门用于Quaternions,这样:

template<>
inline Quatf AnimCurve<Quatf>::lerp( 
    const Quatf& start, 
    const Quatf& end, 
    float time 
    )
{
    return start.slerp(time, end);
}

但是,这不够通用,因为人们也可以使用Quatd。是否可以编写一个适用于两者的函数,因为QuatfQuatd都是Quaternion<T>的类型定义?

以下是AnimCurve的当前定义:

template< typename T >
class AnimCurve {
public:
    AnimCurve() {}
    void addKeyframe(float time, T value);
    T getvalue(float time) const;
private:
    static inline T lerp( const T& start, const T& end, float time );
    std::map<float, T> mKeyframes;
};

1 个答案:

答案 0 :(得分:2)

  

是否可以编写一个适用于两者的函数,因为Quatf和Quatd都是Quaternion的类型定义?

如果您想专门为完全 lerp类模板的两个实例<{1}}算法,而没有其他实例化,那么不,您必须明确专门化两者都有:一次用于Quaternion,一次用于AnimCurve<Quatf>

相关问题