c ++ исключительная передача сообщений - PullRequest
1 голос
/ 14 июля 2010

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

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

0 голосов
/ 14 июля 2010

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

0 голосов
/ 14 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...