Предположим следующие две функции:
#include <iostream>
#include <cstdlib> // atoi
#include <cstring> // strcmp
#include <boost/bind.hpp>
bool match1(const char* a, const char* b) {
return (strcmp(a, b) == 0);
}
bool match2(int a, const char* b) {
return (atoi(b) == a);
}
Каждая из этих функций берет два аргумента, но может быть преобразована в вызываемый объект, который берет только один аргумент при помощи (станд./повышения)bind
. Что-то вроде:
boost::bind(match1, "a test");
boost::bind(match2, 42);
Я хочу смочь получить от двух функций как они, которые берут один аргумент и возврат bool
, вызываемый объект, который берет два аргумента и возвращает && bool
s. Тип аргументов произволен.
Что-то как operator&&
для функций тот возврат bool
.
Тип возвращаемого значения boost :: bind
перегружает оператор &&
(а также многие другие ). Таким образом, вы можете написать
boost::bind(match1, "a test", _1) && boost::bind(match2, 42, _2);
. Если вы хотите сохранить это значение, используйте boost :: function
. В этом случае типом будет
boost::function<bool(const char *, const char *)>
. Обратите внимание, что это не возвращаемый тип boost :: bind
(который не указан), но любой функтор с правильной сигнатурой может быть преобразован в ] boost :: function
.