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