我有一个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
的行为会有所不同。
我考虑过专业化,但考虑到专业化应该依赖于类型依赖类型,在这种情况下如何做?三江源
答案 0 :(得分: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);
};
答案 1 :(得分:3)
您可以通过引入额外的默认参数来解决此问题:
template <typename T, typename Usual = typename T::S>
class MyClass { ... };
然后您可以使用double
:
template <typename T>
class MyClass<T, double> { ... }