Да, мы можем реализовать это
template<typename T>
std::function<T> make_function(T *t) {
return { t };
}
Для этого необходимо передать функцию в make_function
.Чтобы предотвратить перегрузку, чтобы поднять это для чего-то другого, кроме простой функции, вы можете SFINAE это
template<typename T>
std::function<
typename std::enable_if<std::is_function<T>::value, T>::type
> make_function(T *t) {
return { t };
}
Вы не можете передать это объектам функций типа класса, хотя и без указателей на члены.Для произвольных объектов функций нет способа получить подпись вызова (что бы вы сделали, если соответствующий operator()
является шаблоном?).Вероятно, это является причиной того, что C ++ 11 не предоставляет такой возможности.