1

关于这个问题:How to create specialization for a single method in a templated class in 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) {...}

我想专攻s myfunctdouble

这就是我所做的:

// 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 回答