我想用 std::bind 创建一个简单的信号处理类(仅供研究)。但是,我无法编译这段代码:
#include <iostream>
#include <functional>
#include <csignal>
using namespace std;
class SignalHandler
{
public:
void handler(int value)
{
cout << value << endl;
}
SignalHandler()
{
auto callback = std::bind(&SignalHandler::handler, this, std::placeholders::_1);
sighandler_t ret = std::signal(SIGTERM, callback);
if (SIG_ERR == ret) {
throw;
}
}
};
int main() {
SignalHandler handler;
raise(SIGTERM);
return 0;
}
(GCC) 编译器退出: prog.cpp:在构造函数“SignalHandler::SignalHandler()”中: prog.cpp:21:51: 错误:无法将 'std::_Bind(SignalHandler*, std::_Placeholder<1>)>' 转换为 '__sighandler_t {aka void ()(int)}' 作为参数 ' 2' 到 'void ( signal(int, __sighandler_t))(int)' sighandler_t ret = std::signal(SIGTERM, callback);
最佳答案
您可以使用静态 方法来处理 SIGTERM 等。我以前做过。 static
是使签名匹配的关键。
关于c++ - 将 SIGTERM 绑定(bind)到成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526446/