兩類

2013-02-26 45 views
2

模板專業化,我有我的類模板AnimCurve內的靜態成員函數lerp(),我想專門爲四元數,像這樣:兩類

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

你說你有一個「通用的lerp函數」,但你的代碼似乎表明它實際上是類AnimCurve這是一個模板。你能否證實這一點(也許通過發佈'lerp'聲明)? – 2013-02-26 16:34:42

+0

另一個問題,可以肯定的是:你是否希望你的專業化被用於* all *'Quaternion',或者只是'Quatf'和'Quatd'? – 2013-02-26 16:36:44

+0

@LucTouraille就這兩個。另外,AnimCurve類確實是一個模板,我的lerp函數的聲明位於我的問題的第一行。 – num3ric 2013-02-26 16:37:48

回答

2

是否有可能寫一個會工作兩個,因爲這兩個Quatf和Quatd是四元數的類型定義的函數?

如果你想專注你的lerp算法正是Quaternion類模板的這兩個實例,並沒有其他實例,則沒有,你必須明確專攻他們兩個:一次爲AnimCurve<Quatf>,一旦AnimCurve<Quatd>

+0

我可以看到'Quaternion '和'Quatf'讓我困惑! – Nawaz 2013-02-26 16:31:32

+0

@Nawaz:是的,現在我已經看到了,這是不是功能模板還是類模板的成員函數。需要說明的是 – 2013-02-26 16:33:00

+0

這是一個成員函數,是AnimCurve類的一部分。 – num3ric 2013-02-26 16:37:07