Как получить доступ к членам класса и методам из статического метода (обработчик сигнала)

У меня есть одна проблема. Я пишу свою программу на языке 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;
}
};

Вот мой основной класс

class MainClass
{
private:
int member;
public:
void mainLoop(char* args) {
signal(SIGCHLD, &signalHandler);
}
};

Вот моя функция для обработки сигналов

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

}

0

Решение

Статический метод не так сильно отличается от глобальной функции. Если вам нужен доступ к членам экземпляра класса, ваш обработчик сигнала должен принять указатель / ссылку на экземпляр в качестве аргумента.

Что-то вроде этого

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

Другие решения


По вопросам рекламы [email protected]