在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工具? 我们可以实施吗?
答案 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没有提供此类功能的原因。