C ++: соединение связок? - PullRequest
7 голосов
/ 14 апреля 2010

Предположим, следующие две функции:

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

Каждая из этих функций принимает два аргумента, но может быть преобразована в вызываемый объект, который принимает только один аргумент, используя (std / boost) bind. Что-то вроде:

boost::bind(match1, "a test");
boost::bind(match2, 42);

Я хочу иметь возможность получить из двух подобных функций, которые принимают один аргумент и возвращают bool вызываемый объект, который принимает два аргумента и возвращает && из bool s . Тип аргументов произвольный.

Что-то вроде operator&& для функций, которые возвращают bool.

1 Ответ

9 голосов
/ 14 апреля 2010

Тип возврата boost::bind перегрузок operator && (а также многих других ). Так что вы можете написать

boost::bind(match1, "a test", _1) && boost::bind(match2, 42, _2);

Если вы хотите сохранить это значение, используйте boost::function. В этом случае тип будет

boost::function<bool(const char *, const char *)>

Обратите внимание, что это не тип возврата boost::bind (который не указан), но любой функтор с правильной сигнатурой можно преобразовать в boost::function.

...