Является ли функтор, возвращаемый функцией boost::bind, с только связанными аргументами, эквивалентными функции, которая не принимает аргументов?

Предположим, API-запросы, что функция f должен иметь подпись void function(), Соответствует ли следующий пример кода этим требованиям?

 void func(int i)
 {
       do_something(i);
 }

 int main(int argc, char* argv[])
 {
    int i = 3;
    auto f = boost::bind(func, i);
 }

Другими словами: делает f в этом случае отвечает требованиям данного API?

РЕДАКТИРОВАТЬ: мой вопрос был немного расплывчатым по поводу термина "функция". В целях разъяснения: f должен быть подобен функции, поэтому простая функция или функциональный объект. Конкретный случай, почему я задавал этот вопрос, возник, когда я работал с пряди в Boost.ASIO. Здесь документация говорит о возможном обработчике для strand::post:

Объект функции для вызова. Исполнитель создаст копию объекта-обработчика по мере необходимости. Сигнатура функции объекта функции должна быть: void function();

Итак: есть f Из приведенного выше примера объект функции с правильной подписью для strand::post?

2 ответа

f является приведенным выше примером объекта функции с правильной сигнатурой для strand::post

Да, функтор вернулся std::bind является действительным функтором для io_service::strand::post, std::bind существует для таких целей, он связывает параметры со значениями и уменьшает их количество для удовлетворения требований API.

Нет потому что std::bind возвращает неуказанный объект. Требуется наличие определенных членов и методов, но это все. Если точный тип возвращаемого значения не имеет большого значения, возможно, он соответствует требованиям, но, строго говоря, это не функция.

Редактировать:

После уточнения в вопросе ответ строго да, так как этот неопределенный объект должен вести себя так, как strand::post требует.

Другие вопросы по тегам