boost :: function - это шаблонный класс, который принимает сигнатуру функции.Вы также можете использовать function0, function1 и т. Д.
boost::function< void(uint32_t) >
определяет «вызываемый», который выглядит как функция, то есть он принимает один параметр типа uint32_t
и возвращает void,
Соответствующий нумерованный шаблон - function1< void, uint32_t >
.Они всегда сначала указывают тип возвращаемого значения, а затем параметры в следующем порядке.
boost::bind
- это особая функция, которая выводит аргументы, которые вы передаете ей, и создает для вас функтор.
Этоне создаст для вас пустоту (uint32_t), он создаст что-то с шаблоном единицы.
Поэтому измените свою подпись на:
void f2(boost::function<void(uint32_t)>);
Тогда вы можете назвать это так:
f2( boost::bind( &Test::f3, this, _1 ) );
Обратите внимание, что странный _1 является "заполнителем", сообщающим boost :: bind, где он должен ввести параметр, в данном случае uint32_t