我的类模板lerp()
中有一个静态成员函数AnimCurve
,我想专门用于四元数,这样:
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
类模板的这两个实例化而不是其他实例化来专门化Quaternion
算法,则不可以,您必须显式地专门化这两个实例:一次用于AnimCurve<Quatf>
,一次用于AnimCurve<Quatd>
。
关于c++ - 两种类型的模板特化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15094190/