简体   繁体   中英

How to specialize a templated member-function into a templated class in C++?

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 double s.

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.

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);
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM