【发布时间】:2013-03-25 15:39:59
【问题描述】:
我有一些 C 风格的函数返回 0 表示成功,返回 != 0 表示错误。
我想将它们“包装”到 voidthrow 的函数中,而不是返回一个值。
我已经写了这个助手:
void checkStatus(int status) {
if (status != 0)
// throw an error object
}
然后,为了包装一个确定的函数int tilt(float degrees),我使用boost::bind:
function<void(float)> ntilt = bind(checkStatus, bind(tilt, _1));
ntilt(30); // this will call checkStatus(tilt(30))
而且效果很好。但是我想要一个专用的包装函数,所以我可以这样做:
function<void(float)> ntilt = wrap(tilt);
ntilt(30); // this will call checkStatus(tilt(30))
它应该适用于任何返回int的函数/签名。
使用 Boost 的最佳方法是什么?
【问题讨论】:
-
使用 C++ 可能会很乏味,但使用 C++11,您可以使用可变参数模板轻松完成此操作
-
我正在使用 C++11,但如果可能的话,我也对 C++ 解决方案感兴趣。
-
等等,你确定
bind(checkStatus, bind(tilt, _1));工作正常吗? -
@sftrabbit 我正在看那个,但我不明白它应该做什么 xD
-
@user814628: C++11 是 C++。
标签: c++ boost boost-bind