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

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;
};

最佳答案



如果要专门针对lerp类模板的这两个实例化而不是其他实例化来专门化Quaternion算法,则不可以,您必须显式地专门化这两个实例:一次用于AnimCurve<Quatf>,一次用于AnimCurve<Quatd>

关于c++ - 两种类型的模板特化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15094190/

10-09 05:44