boost :: сигналы2 и обработка исключений

Есть ли способ переопределить конкретный момент, когда слот вызывается в boost :: signal2, и выполнить некоторые действия (ведение журнала, отладка, обработка исключений)?

Я хотел бы перехватывать исключения в момент вызова слотов, потому что сигналы / слоты — это место, где путь выполнения в моем коде пересекается между различными программными компонентами, и каждый компонент должен быть необязательным / может быть отключен во время выполнения, если он ведет себя неправильно. Поэтому, когда вызывает вызов слота (может исходить из внешней библиотеки, может быть просто std :: bad_alloc), я хотел бы получить уведомление об этом — и знать, в какой компонент был передан сигнал — чтобы я мог убить этот компонент.

Я не понимаю, как я могу сделать это в сумматоре, потому что у меня нет доступа к слоту или объектам подключения там? Поэтому я не вижу способа получить какую-либо информацию. (Изменение типа возврата в каждом слоте невозможно.)

Есть какой-то супер простой способ сделать это, что я пропустил?

Если нет, как я должен идти об этом?

Подкласс что-то вроде slot_call_iterator (чтобы обернуть вызов в try / catch) и connection_body_base (для хранения информации о том, к какому компоненту он принадлежит, например), и есть ли у boost, чтобы использовать их? (Как?)

Или подкласс сигналов2 :: слот<…>, дать ему информацию о компоненте-владельце в конструкторе и как-то перегрузить оператор () (…)? (Понятия об этом тоже нет, кажется, намного сложнее со всей магией шаблонов.)

4

Решение

Чтобы суммировать комментарии:

От Игоря Р.

Такая функциональность, кажется, не существует, но вы можете добавить функцию
запрос в треке (или даже предоставление патча).

От целого числа (хороший ник):

Спасибо за ваш комментарий. Да, я предположил, что его не было, просто
интересно, есть ли способ подкласса или переопределить публично
экспортировать классы повышения, чтобы сделать свой собственный, вроде. Это может быть пугающим
пытаясь сделать это вслепую с помощью буст-кода, так как я боюсь делать что-то
которые могут сломать или неправильно использовать внутренние органы.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector