Что возвращает boost::bind?

Какого типа данных возвращаемое значение boost::bind? Я хочу сделать функцию, которая будет принимать в себя результат работы boost::bind, но я не знаю какого типа значения он возвращает.

void work(int num){
   std::cout << num << std::endl;
}

int main(){
   auto test = boost::bind(work, 5);
}

Ответы (1 шт):

Автор решения: αλεχολυτ

boost::bind сущность шаблонная, и возвращаемый ею тип может (и будет) зависеть от типов передаваемых аргументов. Однако, если же вы хотите привязаться к определённому варианту, то на помощь приходит decltype. Пример:

#include <iostream>
#include <boost/bind/bind.hpp>

void work(int num){
   std::cout << num << std::endl;
}

void f(decltype(boost::bind(work,int())) arg) {
    arg();
}

int main() {
    auto test = boost::bind(work, 10);
    f(test);
}

Я специально указал int() в f, чтобы показать, что зависимость именно от типа, а не от значения.

При этом самая идея того, что нужно опираться на результирующий тип boost::bind кажется мне сомнительной.

→ Ссылка