假设您有一个具有模板长度和类型的向量类 - 即vec<2,float>
。这些也可以嵌套 - vec<2,vec<2,vec<2,float> > >
或vec<2,vec<2,float> >
。你可以计算出这些载体之一是如何深嵌套是这样的:C++模板:计算值并在编译时作出决定
麻烦的是,你不会知道它有多深,直到运行时间,但你可能需要知道comile时间深度为了做这样的事情:
// Do this one when depth(v1) > depth(v2)
template<int N, typename T, int M, typename U>
inline vec<N,T> operator +(const vec<N,T>& v1, const vec<M,U>& v2) {
return v1 + coerce(v2,v1);
}
// Do this one when depth(v1) < depth(v2)
template<int N, typename T, int M, typename U>
inline vec<M,U> operator +(const vec<N,T>& v1, const vec<M,U>& v2) {
return coerce(v1,v2) + v2;
}
你不能只是扔在一个“如果”的声明,因为(a),这是更深层次的影响的返回类型和(b)裹胁()生成,如果生成错误您尝试将嵌套向量强制转换为嵌套较少的向量。
是否有可能做这样的事情,还是我推高了C++模板的限制?
如果'coerce'能够在编译时检查,您可能会在那里找到您的答案! – 2010-09-14 21:05:24
C++模板的限制。哈。 – GManNickG 2010-09-14 21:08:01
C++模板没有限制。 – 2010-09-14 21:11:32