我的班级看起来像这样:
template<typename tVector,int A>class DaubechIEsWavelet : public AbstractWavelet<tVector> { // line 14public: 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.
总结以上是内存溢出为你收集整理的C:部分模板专业化全部内容,希望文章能够帮你解决C:部分模板专业化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)