gpt4 book ai didi

c++ - std::function 作为 sighandler_t

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:52 25 4
gpt4 key购买 nike

如何指定 lambda、std::bind 结果或任何其他 std::function 作为 unix 信号函数的参数?

我正在尝试以下操作

std::function<void(int)> handler1 = std::bind(&cancellation_token::cancel, &c);
std::function<void(int)> handler2 = [&c](int) { c.cancel(); };

但是不行,因为两者都是

handler1.target<void(int)>()

handler2.target<void(int)>()

返回空值

如果我用自由函数指针初始化处理程序,它就会工作

void foo(int) { ... }
std::function<void(int)> handler = foo;

但这绝对没用。我需要捕获一些局部变量,所以我需要 bind 或 lambda。

其实我明白为什么它不起作用。文档说,如果 target_type() == typeid(T)target 函数返回一个指向存储函数的指针,否则返回一个空指针。我不明白如何让它发挥作用。

有什么建议吗?

最佳答案

由于它是由 bind 或带有捕获数据的 lambda 构建的,因此您不能将其转换为自由函数,因为 target 函数由 typeidstd::function 将其保存在运行时,而不是用于 T 类型,function 是模板化的。对于 std::bind 它将是某种库类型,对于 lambda 它将是某种未命名的类型。

关于c++ - std::function 作为 sighandler_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20800055/

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