我正在尝试将这里解释的函数技术扩展到方法。问题是方法签名模板参数。例如,sin 函数的包装器是这样创建的:
template<typename Sig, Sig& S> struct wrapper;
template<typename Ret, typename... Args, Ret(&P)(Args...)>
struct wrapper<Ret(Args...), P> {
// blah
}
然后被实例化
wrapper<decltype(sin), sin>
但是对于一种方法,bool Foo::blah(int)
这种技术被拒绝:
template<class C, typename Sig, Sig& S> struct wrapper;
template<class C, typename Ret, typename... Args, Ret(C::*P)(Args...)>
struct wrapper<Ret(C::)(Args...), P> {
// blah
}
wrapper<decltype(Foo::blah), &Foo::blah>
那么正确的语法是什么?