【发布时间】:2020-08-19 10:15:33
【问题描述】:
我想实现一个通用函数,它将引用对象和指向其成员函数的指针并调用它。但是,当我的类同时具有 const 和非 const 方法时,我无法这样做,因为我需要提供两个重载:
template<typename Ret, typename Class, typename ...Us>
Ret callMethod(Class &object, Ret (Class::*method)(Us...))
{
return (object.*method)(Us{}...);
}
template<typename Ret, typename Class, typename ...Us>
Ret callMethod(Class &object, Ret (Class::*method)(Us...) const)
{
return (object.*method)(Us{}...);
}
有没有办法只编写 1 个模板函数来接受 const 和非 const 方法指针,这样我就不必编写两次代码了?我正在使用 C++14。
从更广泛的角度来看,我最终想要实现的是传递第三个参数,一个数据缓冲区,将从中提取方法参数 - 因此模板函数尽可能通用地处理它。
【问题讨论】:
-
如果你只有一个函数模板,你希望使用哪个成员函数?