模板專業化,我有我的類模板AnimCurve
內的靜態成員函數lerp()
,我想專門爲四元數,像這樣:兩類
template<>
inline Quatf AnimCurve<Quatf>::lerp(
const Quatf& start,
const Quatf& end,
float time
)
{
return start.slerp(time, end);
}
但是,這還不夠通用,因爲人們也可以使用Quatd
。是否可以編寫一個適用於兩者的函數,因爲Quatf
和Quatd
都是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函數」,但你的代碼似乎表明它實際上是類AnimCurve這是一個模板。你能否證實這一點(也許通過發佈'lerp'聲明)? – 2013-02-26 16:34:42
另一個問題,可以肯定的是:你是否希望你的專業化被用於* all *'Quaternion',或者只是'Quatf'和'Quatd'? – 2013-02-26 16:36:44
@LucTouraille就這兩個。另外,AnimCurve類確實是一個模板,我的lerp函數的聲明位於我的問題的第一行。 – num3ric 2013-02-26 16:37:48