假设我想专门研究PMF类型的模板,我可以这样做:
template<typename F>
struct Foo {};
template<typename R, typename T>
struct Foo<R T::*> {};
R T::*
部分也是std::mem_fn
用来避免所有限定符组合重载的部分。 (参见here。)但是,这种方法的一个缺点是我们丢失了有关该成员函数参数的类型信息。
如果相反,我们写:
template<typename R, typename T, typename... Args>
struct Foo<R (T::*)(Args...)> {};
我们可以知道确切的参数类型(Args...
),但是这个特化无法与const
成员函数(或volatile
/ ref-qualified)匹配。
有没有办法保留参数类型,而不需要为PMF的所有合格版本进行专业化?