2

我有一个这样的辅助函数:

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( Ris 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));
}
4

1 回答 1

2

使用解决enable_if

template<typename T, typename R, typename Arg0>
typename enable_if<is_void<R>::value == false>::type
callMethod(Data *data, T &object, R (T::*method)(Arg0)) {
    push(data, (object.*method)(get<Arg0>(data, 1)));
}

template<typename T, typename R, typename Arg0>
typename enable_if<is_void<R>::value == true>::type
callMethod(Data *data, T &object, R (T::*method)(Arg0)) {
    (object.*method)(get<Arg0>(data, 1));
}
于 2013-03-14T08:32:24.997 回答