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
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 itYou 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.