转载:C++11可变模版参数的妙用 typename... 三点解析_阿六_Dexter的博客-CSDN博客_typename...
template <class T, class R, typename... Args>
class A
{
public:
A(T* t, R(T::* f)(Args...)) :m_t(t), m_f(f) {};
R operator()(Args&&... args)
{
return (m_t->*m_f)(std::forward<Args>(args)...);
}
private:
T* m_t;
R(T::* m_f)(Args...);
};
template <class T, class R, typename... Args>
A<T, R, Args...> Create(T* t, R(T::* f)(Args...))
{
return A<T, R, Args...>(t, f);
}
struct B
{
void Fun(int i) { cout << i << endl; }
void Fun1(int i, double j) { cout << i + j << endl; }
};
int main()
{
B a;
auto d = Create(&a, &B::Fun); //创建委托
d(1); //调用委托,将输出1
auto d1 = Create(&a, &B::Fun1); //创建委托
d1(1, 2.5); //调用委托,将输出3.5
}