我有一个这样的辅助函数:
template<typename T, typename R, typename Arg0>
void callMethod(Data *data, T &object, R (T::*method)(Arg0)) {
push(data, (object.*method)(get<Arg0>(data, 1)));
}
wherepush
将结果推送到数据中,并get
从数据中获取参数。使用 boost 预处理器,我已经为各种数量的参数定义了这个函数。
问题是当方法返回void
( R
is void
) 时,代码无法编译,因为void
它不是函数的有效参数/参数push
。如果是void
返回值,我只想调用方法而不是调用push
. 最好的方法是什么?
重载无济于事,因为对 的调用callMethod
是模棱两可的:
template<typename T, typename Arg0>
void callMethod(Data *data, T &object, void (T::*method)(Arg0)) {
(object.*method)(get<Arg0>(data, 1));
}