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

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

我想为 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++ 中是不可能的。如果您还特化了所有封闭类模板,则只能特化一个成员函数模板。

但无论如何,重载 函数模板通常比专门化它们更好(有关详细信息,请参阅 article by Herb Sutter )。所以只需这样做:

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

  double myfunct(double x);
};

关于c++ - 如何将模板化成员函数专门化为 C++ 中的模板化类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845878/

相关文章:

c++ - 专门化成员指针模板参数解析

c++ - 类模板显式实例化声明

c++ - weak_ptr 是基类的,而 shared_ptr 是派生类的?

C++:如何阻止编译器使用大模板参数发送垃圾邮件错误?

c++ - C++中是否可以关闭线程安全?

c++ - 仅当 .h 位于特定目录中时,g++ 才会神秘地失败

c++ - 轮类作业

C++ 默认构造函数不可用

c++ - 用于在 C++ 中同步线程的二进制信号量

c++ - 模板特化类函数