c++ - 将 SIGTERM 绑定(bind)到成员函数

标签 c++ c++11

我想用 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/

相关文章:

c++ - Qt raw 与 std::shared_ptr

c++ - 我可以 std::forward 折叠表达式中的参数吗?

c++ - 如何为我的程序创建静态库?

c++ - 什么是 C++ 中的重载运算符?

c++ - 为什么 <const char*> 和 <const char[]> 有非常不同的内存或指针行为?

c++ - 两个具有相同大小的可变模板参数

c++ - epoll等待修改文件描述符集

当 vector 调整其容量时,C++ 会发生什么引用?

c++ - 在安装期间检索产品版本的功能

c++ - C++ 上的 ManualResetEvent(来自 C#)实现 : how to avoid race condition