如何制作std :: function实例

Yun*_*ncy 4 c++ c++11

在C++ 0x中,我们使用std::function如下所示:

int normal_function() {
    return 42;
}
std::function<int()> f = normal_function;
Run Code Online (Sandbox Code Playgroud)

因此,要获得一个std::function实例,我们必须首先定义它的类型.但它很无聊,有时很难.

那么,我们可以使用make来获取std::function实例std::tuple吗?

事实上,我只是谷歌搜索,C++ 0x不提供这样的make工具.

为什么C++ 0x没有提供make工具?我们可以实施吗?

Joh*_*itb 16

是的,我们可以实施它

template<typename T>
std::function<T> make_function(T *t) {
  return { t };
}
Run Code Online (Sandbox Code Playgroud)

这需要您将函数传递给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 };
}
Run Code Online (Sandbox Code Playgroud)

你不能传递类类型的函数对象,也没有成员指针.对于任意函数对象,无法获得调用签名(如果各自operator()是模板,您会怎么做?).这可能是C++ 11没有提供此类功能的原因.