将成员函数传递给std :: signal

时间:2018-06-14 18:29:17

标签: c++ c++11

我有A类,它有一个关闭所有已打开的套接字的关闭方法。

如果用户终止程序,我希望有一个信号处理程序来关闭在运行时打开的所有套接字。我需要类似下面的代码,但当然,它不会这样。 我试过这样的事,

#include <csignal>

struct A
{
    void shutdown() {}
    int a = 0;
};

int main()
{
    A a;
    auto t = [&]()->void {a.shutdown();};
    std::signal(SIGINT, t);
}

2 个答案:

答案 0 :(得分:1)

不幸的是,它无法完成。信号处理程序是一种过于原始的机制,无法支持满足您目标的任何内容,即在类的特定实例上调用成员函数。

实现半相似性的一种方法是使用指向当前活动控件类实例的全局指针,并通过信号处理程序中的全局指针调用成员。

答案 1 :(得分:-1)

您不能将成员函数传递为名称空间级函数。要么将它们设置为静态,要么将它们包装在命名空间级别的函数中,并将对象作为用户数据传递。