C++: соединение связывает?

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

#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, вызываемый объект, который берет два аргумента и возвращает && bools. Тип аргументов произволен.

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

7
задан Giovanni Funchal 14 April 2010 в 15:41
поделиться

1 ответ

Тип возвращаемого значения 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 .

9
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: