C:部分模板专业化
发布时间:2020-12-16 09:28:43 所属栏目:百科 来源:网络整理
导读:我没有获得部分模板专业化. 我的班级看起来像这样: templatetypename tVector,int Aclass DaubechiesWavelet : public AbstractWavelettVector { // line 14public: static inline const tVector waveletCoeff() { tVector result( 2*A ); tVector sc = sca
我没有获得部分模板专业化.
我的班级看起来像这样: 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 }); } 错误gcc输出是: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |