Здравствуйте, bkat, Вы писали:
B>Сто лет уже не писал на с++ и вот потребовалось опять. B>Можно ли как зарегистрировать нестатический метод класса как обработчик сигналов
Нет.
Функция signal() потребляет один параметр — указатель на функцию. Нестатический метод — это два параметра: указатель на функцию и указатель на экземпляр класса.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, bkat, Вы писали:
B>>Сто лет уже не писал на с++ и вот потребовалось опять. B>>Можно ли как зарегистрировать нестатический метод класса как обработчик сигналов
Pzz>Нет.
Pzz>Функция signal() потребляет один параметр — указатель на функцию. Нестатический метод — это два параметра: указатель на функцию и указатель на экземпляр класса.
это понятно.
А есть что-то другое для похожих целей?
Может какие новые стандартные обертки есть, кто с помощью std::bind можно сделать без статических конструкций?
B>это понятно. B>А есть что-то другое для похожих целей? B>Может какие новые стандартные обертки есть, кто с помощью std::bind можно сделать без статических конструкций?
Здравствуйте, reversecode, Вы писали:
B>>это понятно. B>>А есть что-то другое для похожих целей? B>>Может какие новые стандартные обертки есть, кто с помощью std::bind можно сделать без статических конструкций?
R>кто мешает вбить в гугл R>С++ signal std::bind R>и устроить себе суточное чтиво ? R>первая ссылка с гугла R>https://stackoverflow.com/questions/52013007/how-to-use-stdbind-function-as-a-signal-handler-in-c
Спасибо, посмотрю.
Хотя там все же обычные функции и все равно не вижу как сделать чтобы вызвался именно метод класса без явных статических струкрур.
B>Спасибо, посмотрю. B>Хотя там все же обычные функции и все равно не вижу как сделать чтобы вызвался именно метод класса без явных статических струкрур.
очевидно — никак
уже третим сообщения пытаюсь сказать
любая даже придуманная супер обертка будет корчить из себя статик функцию и инстанс
Здравствуйте, bkat, Вы писали:
B>это понятно. B>А есть что-то другое для похожих целей? B>Может какие новые стандартные обертки есть, кто с помощью std::bind можно сделать без статических конструкций?
Никак. То, что тебе нужно, называется closure: это когда имея функцию #1 и некоторое количество аргументов к ней, динамически получают функцию #2, которая вызывает функцию #1, подставляя аргументы.
В C/C++ это невозможно сделать на уровне ABI (Application Binary Interface). Невозможно в процессе исполнения создать "настоящую" функцию, если ее не было в бинарном файле.
Максимум, что можно сделать, это создать объект с перегруженным оператором "скобки". Обращение к такому объекту из C++ будет выглядеть, как вызов функции, но только выглядеть — из него невозможно получить указатель на функцию, пригодный для C (без плюсов).
Поэтому указатель на объект придется где-то хранить отдельно. И тогда становится возможным использовать статические методы.
Здравствуйте, bkat, Вы писали:
B>Сто лет уже не писал на с++ и вот потребовалось опять. B>Можно ли как зарегистрировать нестатический метод класса как обработчик сигналов B>
Здравствуйте, bkat, Вы писали:
B>Спасибо, посмотрю. B>Хотя там все же обычные функции и все равно не вижу как сделать чтобы вызвался именно метод класса без явных статических струкрур.
В signal можно передать адрес обычной функции. Обычная функция кастит параметр к указателю на определенный класс, и вызывает какой-то его метод
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, bkat, Вы писали:
B>>Спасибо, посмотрю. B>>Хотя там все же обычные функции и все равно не вижу как сделать чтобы вызвался именно метод класса без явных статических струкрур.
M>В signal можно передать адрес обычной функции. Обычная функция кастит параметр к указателю на определенный класс, и вызывает какой-то его метод
M>>В signal можно передать адрес обычной функции. Обычная функция кастит параметр к указателю на определенный класс, и вызывает какой-то его метод
R>this где взять для метода ?
Ошибся. Думал, там есть void* параметр. Тогда — только в переменной хранить