3

次のように、クォータニオンに特化したいlerp()クラス テンプレート内に静的メンバー関数があります。AnimCurve

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

ただし、 も使用できるため、これは十分に一般的ではありませんQuatd。と の両方が の型定義であるため、両方で機能する関数を作成することは可能Quatfですか?QuatdQuaternion<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 の両方が Quaternion の型定義であるため、両方で機能する関数を作成することは可能ですか?

クラス テンプレートのこれら 2 つのインスタンス化だけにlerpアルゴリズムを特化し、他のインスタンス化には特化しない場合は、いいえ、それらの両方を明示的に特化する必要があります: once forと once for .QuaternionAnimCurve<Quatf>AnimCurve<Quatd>

于 2013-02-26T16:28:49.420 に答える