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

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

本文关键字:函数 专用 成员 C++      更新时间:2023-10-16

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

我想专门为double专门myfunct

这就是我所做的:

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

但它不起作用。

在C++是不可能的。如果还专用于所有封闭类模板,则只能专用于成员函数模板。

但无论如何,通常最好重函数模板而不是专门化它们(有关详细信息,请参阅 Herb Sutter 的这篇文章)。所以只需这样做:

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