如何制作std :: function实例

时间:2011-12-29 16:59:32

标签: c++ c++11

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

int normal_function() {
    return 42;
}
std::function<int()> f = normal_function;

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

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

事实上,我只是用谷歌搜索,C ++ 0x没有提供这样的制作工具。

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

1 个答案:

答案 0 :(得分:16)

是的,我们可以实施它

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没有提供此类功能的原因。