Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从静态方法(信号处理程序)访问类成员和方法_C++_Unix_Signals_Signal Handling - Fatal编程技术网

C++ 如何从静态方法(信号处理程序)访问类成员和方法

C++ 如何从静态方法(信号处理程序)访问类成员和方法,c++,unix,signals,signal-handling,C++,Unix,Signals,Signal Handling,我有一个问题。我正在用C++语言编写我的程序。我有一个问题。我需要为我的进程设置信号处理程序。由于信号与系统级的过程有关,因此我遇到了这个问题。 我的课程由几节课组成。它们是连接在一起的。但在这种情况下,这并不重要。 问题是我需要从信号处理程序访问类的成员和方法。例如,我有一个名为Foo的类,它有一些成员和方法。 因此,我需要从我的处理程序调用它的函数并更改成员。 我知道编译器应该知道这个类实例在所有程序执行期间都会存在。 我曾尝试在另一个类中设置静态成员类Foo实例,但这并没有解决问题。 我不

我有一个问题。我正在用C++语言编写我的程序。我有一个问题。我需要为我的进程设置信号处理程序。由于信号与系统级的过程有关,因此我遇到了这个问题。 我的课程由几节课组成。它们是连接在一起的。但在这种情况下,这并不重要。 问题是我需要从信号处理程序访问类的成员和方法。例如,我有一个名为Foo的类,它有一些成员和方法。 因此,我需要从我的处理程序调用它的函数并更改成员。 我知道编译器应该知道这个类实例在所有程序执行期间都会存在。 我曾尝试在另一个类中设置静态成员类Foo实例,但这并没有解决问题。 我不知道这样做的正确方法是什么。请说明在这种情况下如何正确执行信号处理

下面是我的代码示例:

    class MyContainer
    {
    private:
        std::vector<Foo> container;
    public:
        int removeFromContainer(Foo* aFoo) { 
        // DO some stuff 
return RESULT_CODE;
}
 int addToContainer(Foo* aFoo) { 
        // DO some stuff 
        return RESULT_CODE;
        }
    };
这是我的信号处理函数

  void static signalHandler_child(int p)
      {
           this->myContainerInstance->addToContainer(new Foo);

      }

静态方法与全局函数没有太大区别。如果需要访问类的实例成员,则信号处理程序应将实例指针/引用作为参数

像这样的

class Foo
{
private:
    int member;
public:
    static int Handler(Foo* aFoo) { return aFoo->member; }
};
class Foo
{
private:
    int member;
public:
    static int Handler(Foo* aFoo) { return aFoo->member; }
};