gpt4 book ai didi

c++ - 统一处理方法返回void和方法返回值

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:37 25 4
gpt4 key购买 nike

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

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)));
}

其中 push 将结果推送到数据中,而 get 从数据中获取参数。使用升压预处理器,我已经为各种数量的参数定义了这个函数。

问题是当方法返回 void(Rvoid)时,代码无法编译,因为 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));
}

最佳答案

使用 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));
}

关于c++ - 统一处理方法返回void和方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com