部分模板专门化更大类的单个方法

Grz*_*nio 4 c++ templates

我有以下课程;

template<int N, int M, int K>
class BaumWelch
{
  //lots of stuff
  const TransitionMatrixTemplate<N, M> randomA()
  { //.... }
}
Run Code Online (Sandbox Code Playgroud)

现在我想专门randomA研究N = 1 的方法.我该怎么做?

我尝试了这个问题:模板化的一个方法的模板特化,但它似乎不适用于部分特化.这个问题:C++部分方法专业化似乎更相关,但它建议专门化整个类(在我的情况下这是非常大的).是否可以专门化整个班级,但实际上只专注于这一种方法?

Dre*_*ann 6

我想专门randomA研究N = 1 的方法.我该怎么做?

您已经发现不允许对函数进行部分特化.

但是,您可以完全专门化代码的"详细"实现.

  template<int TheN>
  detail_randomA();

  const TransitionMatrixTemplate<N, M> randomA()
  {
      return detail_randomA<N>();
  }
Run Code Online (Sandbox Code Playgroud)

在课堂宣言之外:

  template<int N, int M, int K>
  template<int TheN>
  BaumWelch<N,M,K>::detail_randomA()
  {
      //lots of stuff when N != 1
  }

  template<int N, int M, int K>
  template<>
  BaumWelch<N,M,K>::detail_randomA<1>()
  {
      //lots of stuff when N == 1
  }
Run Code Online (Sandbox Code Playgroud)