我的类模板lerp()
中有一个静态成员函数AnimCurve
我想专门用于Quaternions,这样:
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;
};
答案 0 :(得分:2)
是否可以编写一个适用于两者的函数,因为Quatf和Quatd都是Quaternion的类型定义?
如果您想专门为完全 lerp
类模板的两个实例<{1}}算法,而没有其他实例化,那么不,您必须明确专门化两者都有:一次用于Quaternion
,一次用于AnimCurve<Quatf>
。