17Feb/170
binding c++ class members as c signal handlers
#include <signal.h>
#include <functional>
std::function<void(int)> callback_wrapper;
void callback_function(int value)
{
callback_wrapper(value);
}
class Foo {
public:
void catch_signal(int) {}
};
int main(int argc, char** argv)
{
Foo foo;
// deprecated since C++-11
callback_wrapper = std::bind1st(std::mem_fun(&Foo::catch_signal),
&foo);
// or
callback_wrapper = std::bind(&Foo::catch_signal,
&foo,
std::placeholders::_1);
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = callback_function;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGTERM, &sigIntHandler, NULL);
}