如何在C ++中将模板化的成员函数专门化为模板化的类?

时间:2013-09-17 09:18:17

标签: c++ templates g++ template-specialization

关于这个问题: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) {...}

我希望myfunct专门针对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) {...}

但它不起作用。

1 个答案:

答案 0 :(得分:4)

这在C ++中是不可能的。如果您还专门化所有封闭的类模板,则只能专门化成员函数模板。

但无论如何,重载函数模板通常更好,而不是专门化它们(详情见article by Herb Sutter)。所以只需这样做:

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

  double myfunct(double x);
};