3

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

1 回答 1

3

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

如果您想专门针对类模板的这两个实例化您的lerp算法,而不是Quaternion其他实例化,那么不,您必须明确专门化它们:一次 forAnimCurve<Quatf>和一次 for AnimCurve<Quatd>

于 2013-02-26T16:28:49.420 回答