假設您有一個具有模板長度和類型的向量類 - 即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