В некоторых ситуациях желательно иметь возможность ввести -для удаления вызываемого (, например. функция, указатель функции, экземпляр объекта с operator()
, лямбда,mem_fn
), например, в Использование адаптеров Boost с лямбда-выражениями C++11 , где требуется назначаемый копия -и конструируемый по умолчанию -тип.
std::function
было бы идеально, но, по-видимому, нет способа автоматически определить, с какой подписью создавать экземпляр шаблона класса std::function
. Есть ли простой способ получить сигнатуру функции произвольного вызываемого объекта и/или обернуть ее в соответствующий std::function
экземпляр экземпляра (, то есть make_function
шаблон функции )?
В частности, я ищу тот или иной из
template using get_signature =...;
template std::function> make_function(F &&f) {... }
так что make_function([](int i) { return 0; })
возвращает std::function
. Очевидно, что это не сработает, если экземпляр можно вызывать с более чем одной сигнатурой (, например. объекты с более чем одним, шаблоном или параметром по умолчанию -operator()
s ).
Boost — это хорошо, хотя решения без -Boost, которые не слишком сложны, предпочтительнее.
Отредактируйте :, отвечая на мой собственный вопрос.