У меня есть некоторые функции C-стиля, которые возвращают 0
, чтобы указать успех, и != 0
при ошибке.
Я хотел бы «обернуть» их в void
функции, которые throw
вместо того, чтобы возвращать значение.Общая функция bind() с Boost
Я написал этот помощник:
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, вы можете сделать это с помощью шаблонов varadic легко – dchhetri
Я использую C++ 11, но меня также интересует решение на C++, если это возможно , –
Подождите, вы уверены, что 'bind (checkStatus, bind (tilt, _1)),' отлично работает? –