将SIGTERM绑定到成员函数

时间:2015-09-11 14:58:09

标签: 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&lt; 1&gt;)&gt;' '__sighandler_t {aka void()(int)}'参数'2'到'void( signal(int,__sighandler_t))(int)'    sighandler_t ret = std :: signal(SIGTERM,callback);

1 个答案:

答案 0 :(得分:1)

您可以使用静态方法来处理SIGTERM等。我以前做过那个。 static是获得签名匹配的关键。