Есть ли способ переопределить конкретный момент, когда слот вызывается в boost :: signal2, и выполнить некоторые действия (ведение журнала, отладка, обработка исключений)?
Я хотел бы перехватывать исключения в момент вызова слотов, потому что сигналы / слоты — это место, где путь выполнения в моем коде пересекается между различными программными компонентами, и каждый компонент должен быть необязательным / может быть отключен во время выполнения, если он ведет себя неправильно. Поэтому, когда вызывает вызов слота (может исходить из внешней библиотеки, может быть просто std :: bad_alloc), я хотел бы получить уведомление об этом — и знать, в какой компонент был передан сигнал — чтобы я мог убить этот компонент.
Я не понимаю, как я могу сделать это в сумматоре, потому что у меня нет доступа к слоту или объектам подключения там? Поэтому я не вижу способа получить какую-либо информацию. (Изменение типа возврата в каждом слоте невозможно.)
Есть какой-то супер простой способ сделать это, что я пропустил?
Если нет, как я должен идти об этом?
Подкласс что-то вроде slot_call_iterator (чтобы обернуть вызов в try / catch) и connection_body_base (для хранения информации о том, к какому компоненту он принадлежит, например), и есть ли у boost, чтобы использовать их? (Как?)
Или подкласс сигналов2 :: слот<…>, дать ему информацию о компоненте-владельце в конструкторе и как-то перегрузить оператор () (…)? (Понятия об этом тоже нет, кажется, намного сложнее со всей магией шаблонов.)
Чтобы суммировать комментарии:
От Игоря Р.
Такая функциональность, кажется, не существует, но вы можете добавить функцию
запрос в треке (или даже предоставление патча).
От целого числа (хороший ник):
Спасибо за ваш комментарий. Да, я предположил, что его не было, просто
интересно, есть ли способ подкласса или переопределить публично
экспортировать классы повышения, чтобы сделать свой собственный, вроде. Это может быть пугающим
пытаясь сделать это вслепую с помощью буст-кода, так как я боюсь делать что-то
которые могут сломать или неправильно использовать внутренние органы.
Других решений пока нет …