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

标签 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);
}

最佳答案

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

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

关于c++ - 将成员函数传递给 std::signal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863780/

相关文章:

c++11 - 如何添加 -std=c++11 来制作文件

c++ - std::tolower 和 Visual Studio 2013

c++ - 字符串正则表达式替换需要 6 个参数但是..MinGW,CMake,w7

c++ - 如何更改任务管理器中的应用程序图标

c++ - 从不同的线程获取用户输入

c++ - 将按引用传递和按值传递混合到可变参数模板函数是否有效?

c++ - C++ 中的互斥量和 lambda 函数

c++ - 头文件中定义的多个结构 - 我应该将它们移出单独的 h 和 cpp 文件吗

c++ - 具有 'this' 指针的类的大小

c++ - 我应该在 C++11 中显式声明转换运算符吗?