In C++0x, we use use std::function
like the following:
int normal_function() {
return 42;
}
std::function<int()> f = normal_function;
So to get an std::function
instance, we have to define its type firstly. But it's boring and sometimes hard.
So, can we just use make to get a std::function
instance just like std::tuple
?
In fact, I just googled, C++0x doesn't provide such make facility.
Why C++0x no provide make facility? Can we implement it?
Yes we can implement it
template<typename T>
std::function<T> make_function(T *t) {
return { t };
}
This requires that you pass a function to make_function
. To prevent overload to pick this up for something other than a plain function, you can SFINAE it
template<typename T>
std::function<
typename std::enable_if<std::is_function<T>::value, T>::type
> make_function(T *t) {
return { t };
}
You cannot pass it class type function objects though and no member pointers. For arbitrary function objects there is no way to obtain a call signature (what would you do if the respective operator()
is a template?). This probably is the reason that C++11 provides no such facility.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With