我想用 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);
答案 0 :(得分:1)
您可以使用静态方法来处理SIGTERM等。我以前做过那个。 static
是获得签名匹配的关键。