Как говорит Дрю, это не похоже на сигналы и слоты.
И, как говорит dribeas, обходной путь - это протокол с параметром bool& found
, который начинается с false, при этом каждый слот проверяется в начале и возвращает значение true. Если в каком-либо слоте установлено значение true, обработка других вызовов будет происходить очень быстро.
Но для того, чтобы охватить все базы (даже нежелательные), я упомяну, что поскольку сигналы boost :: все работают в том же потоке, что и вызывающий , вы могли бы генерировать пользовательское исключение из сигнала, а затем ловить его на сайте вызова. Что бы там ни было, люди иногда прибегают к этому, когда чувствуют, что у них нет другого выбора ... как во время алгоритмов посетителей в библиотеке графов наддува:
Как остановить поиск в ширину с помощью библиотеки графиков повышения при использовании пользовательского посетителя?
И теперь, когда я это упомянул, не делайте так. :)
ОБНОВЛЕНИЕ: Не знал, но вы обнаружили, что в Boost есть механизм для элегантной обработки этого с помощью сумматоров, которые принимают итераторов , а не значений результата:
"Итераторы ввода, переданные комбинатору, преобразуют операции разыменования в вызовы слотов. Поэтому комбинаторы имеют возможность вызывать только некоторые слоты, пока не будет удовлетворен какой-то конкретный критерий."
Если вы уверены, что придерживаетесь наддува, то вы ответили на свой вопрос, потому что он делает то, что вы хотите. Хотя обратите внимание, что другие системы сигналов / слотов (например, Qt) не будут иметь параллели с этим ...