gpt4 book ai didi

c++ - 如何制作 std::function 实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:44 24 4
gpt4 key购买 nike

在 C++0x 中,我们像下面这样使用 std::function:

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

所以要获得一个std::function 实例,我们必须首先定义它的类型。但这很无聊,有时也很难。

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

事实上,我只是用谷歌搜索了一下,C++0x 并没有提供这样的 make 工具。

为什么 C++0x 不提供 make 工具?我们可以实现吗?

最佳答案

是的,我们可以实现它

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

关于c++ - 如何制作 std::function 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com