gpt4 book ai didi

c++ - 如何将信号处理程序注册为类方法?

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

假设我有一个 class A,有一个公共(public)方法 void f(int sig)。在 A 的构造函数中,我添加了

signal(SIGSEV, boost::bind(&A::f, this, _1));

这会返回编译错误

error : cannot convert `boost::_bi::bind_t<void, boost::_mfi::mf1<void, A, int>, boost::_bi::list2<boost::_bi::value<A*>, boost::arg<1> > >' to `__sighandler_t {aka void (*)(int)}' for argument `2' to `void (* signal(int, __sighandler_t))(int)'

知道为什么吗?

最佳答案

作为 C 函数,signal 只能采用普通函数指针,不能采用任意可调用类型。您需要一个非成员包装函数和一个全局变量来存储 this,以便从信号处理程序调用成员函数。

static A * signal_object;
extern "C" void signal_handler(int signum) {signal_object->f(signum);}

// later...
signal_object = this;
signal(SIGSEGV, signal_handler);

关于c++ - 如何将信号处理程序注册为类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617214/

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