C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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 });
}

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。