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

C++ 将成员函数传递给std::signal,c++,c++11,C++,C++11,我有一个类,它有一个关闭方法,关闭所有打开的套接字 如果用户终止程序,我希望有一个信号处理程序来关闭运行时打开的所有套接字。我需要下面的代码,但当然,它不是这样工作的。 我试过这样的东西 #include <csignal> struct A { void shutdown() {} int a = 0; }; int main() { A a; auto t = [&]()->void {a.shutdown();}; st

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

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

#include <csignal>

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

int main()
{
    A a;
    auto t = [&]()->void {a.shutdown();};
    std::signal(SIGINT, t);
}
#包括
结构A
{
void shutdown(){}
int a=0;
};
int main()
{
A A;
自动t=[&]()->void{a.shutdown();};
std::信号(SIGINT,t);
}

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

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

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

Ah,right,signal()设置全局值,并要求通过全局变量传递参数。坚持使用静态函数。