大佬教程收集整理的这篇文章主要介绍了C:部分模板专业化,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template<typename tVector,int a> class DaubechiesWavelet : public AbstractWavelet<tVector> { // line 14 public: static inline const tVector waveletCoeff() { tVector result( 2*a ); tVector sc = scalingCoeff(); for(int i = 0; i < 2*A; ++i) { result(i) = pow(-1,i) * sc(2*A - 1 - i); } return result; } static inline const tVector& scalingCoeff(); }; template<typename tVector> inline const tVector& DaubechiesWavelet<tVector,1>::scalingCoeff() { // line 30 return tVector({ 1,1 }); }
line 30: error: invalid use of incomplete type ‘class numerics::wavelets::DaubechiesWavelet<tVector,1>’ line 14: error: declaration of ‘class numerics::wavelets::DaubechiesWavelet<tVector,1>’
template<typename tVector> inline const tVector& DaubechiesWavelet<tVector,1 }); }
这是部分专业化成员的定义,定义如下
template<typename tVector> class DaubechiesWavelet<tVector,1> { /* ... */ const tVector& scalingCoeff(); /* ... */ };
它不是主模板“DaubechiesWavelet”的成员“scalingCoeff”的特化.需要这样的专门化来传递所有参数的值,而您的专业化不会这样做.要做你想做的事,你可以使用重载
template<typename tVector,int a> class DaubechiesWavelet : public AbstractWavelet<tVector> { // line 14 template<typename T,int I> struct Params { }; public: static inline const tVector waveletCoeff() { tVector result( 2*a ); tVector sc = scalingCoeff(); for(int i = 0; i < 2*A; ++i) { result(i) = pow(-1,i) * sc(2*A - 1 - i); } return result; } static inline const tVector& scalingCoeff() { return scalingCoeffImpl(Params<tVector,A>()); } private: template<typename tVector1,int a1> static inline const tVector& scalingCoeffImpl(Params<tVector1,A1>) { /* generic impl ... */ } template<typename tVector1> static inline const tVector& scalingCoeffImpl(Params<tVector1,1>) { return tVector({ 1,1 }); } };
请注意,您使用的初始化语法仅适用于C 0x.
以上是大佬教程为你收集整理的C:部分模板专业化全部内容,希望文章能够帮你解决C:部分模板专业化所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。