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

私が欲しいのは、 is の場合、オーバーロードされた演算子operator()の動作が異なることMySですdouble

特化を考えたのですが、特化が型依存の型に作用することを考えると、この場合どうすればよいでしょうか?ありがとうございました

4

2 に答える 2

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 に答える
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 に答える