我想用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: prog.cpp:21:51:无法将'std::_Bind(SignalHandler*,std::_Placeholder<1>)‘转换为'__sighandler_t { to void (Int)}’,用于参数'2‘到'void’(信号(int,__sighandler_t))(int)‘sighandler_t =std::SIGTERM,回调;
发布于 2015-09-11 16:02:52
您可以使用静态方法来处理SIGTERM等。我以前也这么做过。static是获得匹配签名的关键。
https://stackoverflow.com/questions/32526446
复制相似问题