1

この質問に関して: C++ でテンプレート化されたクラスで単一のメソッドの特殊化を作成する方法は? ...

私はこのクラスを持っています:

template <typename T>
class MyCLass {
public:
  template <typename U>
  U myfunct(const U& x);
};
// Generic implementation
template <typename T>
template <typename U>
U MyCLass<T>::myfunct(const U& x) {...}

myfunctそしてsに特化したいdouble

これが私がすることです:

// Declaring specialization
template <>
template <typename T>
double MyCLass<T>::myfunct(const double& x);

// Doing it
template <>
template <typename T>
double MyCLass<T>::myfunct(const double& x) {...}

しかし、うまくいきません。

4

1 に答える 1

4

これは C++ では不可能です。含まれているすべてのクラス テンプレートも特殊化する場合にのみ、メンバー関数テンプレートを特殊化できます。

いずれにせよ、一般的には、関数テンプレートを特殊化するよりもオーバーロードする方が適切です (詳細については、Herb Sutter によるこの記事を参照してください)。したがって、これを行うだけです:

template <typename T>
class MyCLass {
public:
  template <typename U>
  U myfunct(const U& x);

  double myfunct(double x);
};
于 2013-09-17T09:27:18.003 に答える