4

我有一个 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) {...}

我想要的是重载运算符在isoperator()时的行为不同。MySdouble

我考虑过专业化,但是考虑到专业化应该作用于依赖于类型的类型,在这种情况下怎么办?谢谢

4

2 回答 2

3

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

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);
};
于 2013-09-17T08:38:47.873 回答
3

您可以通过引入额外的默认参数来解决此问题:

template <typename T, typename Usual = typename T::S>
class MyClass { ... };

然后你可以专门使用double

template <typename T>
class MyClass<T, double> { ... }
于 2013-09-17T08:41:53.880 回答