C:部分模板专业化

C:部分模板专业化,第1张

概述我没有获得部分模板专业化. 我的班级看起来像这样: template<typename tVector, int A>class DaubechiesWavelet : public AbstractWavelet<tVector> { // line 14public: static inline const tVector waveletCoeff() { tVector re 我没有获得部分模板专业化.
我的班级看起来像这样:

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:部分模板专业化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存