Является ли функтор, возвращаемый функцией 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
требует.