C++ подобная исключению передача сообщений

Я работаю над разработкой довольно устойчивого 2D игрового механизма как основа, что другие игры могут быть созданы прочь как проект для забавы (я знаю, что уже существуют вещи, которые делают это, но это не забава).

Я пытаюсь выяснить хороший способ сделать передачу сообщений между классами в механизме. Сначала я думал об использовании иерархии исключений и броска их каждый раз, когда что-то потребовало его. Но поскольку я разрабатывал тот путь, я понял, что было настоящее большое количество выданных исключений, поскольку они использовались для довольно общих вещей (часть подпрограмм, которые обрабатывают новаторский и определение местоположения единицы и вещи, которые должны протестировать состояние игровой доски много). Исключения использовались для вещей как новаторское, прибыл через единицу в путь и должен был обойти его, это выдаст исключение TileOccupied, и новаторское могло корректно обработать это и продолжиться. Как может ожидаться, это создало много исключений.

Интернет сказал мне, что исключения являются дорогими из-за всей обработки времени выполнения, которую они должны сделать. Но они обрабатывают то, в чем я нуждаюсь отлично, который является способностью к propogate сообщение назад вызывающей стороне даже через переходящие подпрограммы для указания, когда что-то произошло, или что-то не было как ожидалось.

Там какой-либо чистый/эффективный путь состоит в том, чтобы сделать это в C++? Или я структурирую вещи очень неправильно, если я использую этот тип уведомления? Я все еще учусь, таким образом, любые предложения значительно ценились бы (и я готов читать / изучают любые ссылки, можно бросить мой путь),

Редактирование я пытаюсь сделать это в стандартном C++ btw. Я пишу это на Linux и хочу, чтобы это скомпилировало и было выполнимо платформенно независимый. Я в настоящее время использую Повышение его.

1
задан Veaviticus 14 July 2010 в 18:59
поделиться

3 ответа

Хотя для этого требуется явная регистрация, похоже, что вам нужны обратные вызовы (облегченные, например, Boost.Function ) или сигналы (например, Boost.Signals / Сигналы2 ).

2
ответ дан 2 September 2019 в 23:02
поделиться

Исключения - это неправильный способ сделать это. Обычным предложением было бы прямое проектирование событий / слушателей, но это быстро выходит из-под контроля в любой нетривиальной системе. Я бы указал вам на дизайн доски для слабой связи.

0
ответ дан 2 September 2019 в 23:02
поделиться

Есть ли причина, по которой вы не использовали очередь событий и/или настройку наблюдателя?

0
ответ дан 2 September 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: