How to specialize a templated member-function into

2019-06-03 10:24发布

问题:

With regards to this question: How to create specialization for a single method in a templated class in C++? ...

I have this class:

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) {...}

And I want to specialize myfunct for doubles.

This is what I do:

// 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) {...}

But it does not work.

回答1:

That's not possible in C++. You can only specialise a member function template if you also specialise all enclosing class templates.

But anyway, it's generally better to overload function templates instead of specialising them (for details see this article by Herb Sutter). So simply do this:

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

  double myfunct(double x);
};