我有一个 C++ 模板化类

// Definition
template <typename T>
class MyCLass {
public:
  typedef typename T::S MyS; // <-- This is a dependent type from the template one
  MyS operator()(const MyS& x);
};

// Implementation
template <typename T>
MyCLass<T>::MyS MyClass<T>::operator()(const MyClass<T>::MyS& x) {...}

我想要的是当 operator()MyS 时,重载运算符 double 的行为有所不同。

我想过特化,但是考虑到特化应该作用于类型相关的类型,在这种情况下怎么办?谢谢

最佳答案

您可以将工作转发给一些私有(private)重载函数:

template <typename T>
class MyCLass {
public:
  typedef typename T::S MyS;
  MyS operator()(const MyS& x) { return operator_impl(x); }

private:
  template<typename U>
  U operator_impl(const U& x);

  double operator_impl(double x);
};

关于c++ - 如何根据类型相关类型专门化 C++ 模板类函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18844942/

10-11 04:42