Указатели членов или ссылочные аргументы? - PullRequest
0 голосов
/ 20 октября 2010

У меня следующая проблема.

Я получил класс PluginLoader, который наблюдает за загрузкой плагинов. Он делит подэтапы работы на другие классы, такие как Plugin. Plugin вызывает функции PluginLoader при его обработке. Давайте назовем эту функцию AddData. Здесь PluginLoader должен проверить, являются ли полученные данные дубликатами. Для этого используется класс ConflictResolver. Теперь моя проблема в том, как сделать объект ConflictResolver доступным для PluginLoader. Есть 3 способа, которые я вижу из этого.

  1. Используйте класс ConflictResolverFactory и создайте объект ConflictResolver для PluginLoader.
  2. Передайте построенный ConflictResolver* в PluginLoader через его конструктор или функцию-член SetConflictResolver, сохраните его в переменной-члене и используйте его позже. Оба способа имеют свои недостатки. Если я передам его в конструктор, мне придется выбросить, если указатель равен NULL. И я не могу использовать исключения, как это принято здесь. Если я передам его через SetConflictResolver, я не смогу гарантировать, что эта функция действительно будет вызываться пользователем. Или мне придется проверить, является ли элемент ConflictResolver* NULL везде, где я его использую.
  3. Передайте метод ConflictResolver & PluginLoader s Load, где будет выполнена вся работа. В свою очередь, метод загрузки Plugin s должен также принять ConflictResolver & (хотя он не используется для него) и передать его обратно в AddData, где PluginLoader сможет его использовать.

Третий метод безопаснее, чем второй. Тем не менее, я должен передать ссылку, даже если она не используется.

Если первый метод не может быть использован, каков наилучший способ сделать это?

Извинения за стену: wq!

1 Ответ

1 голос
/ 20 октября 2010

Вы можете передать ConflictResolver & в конструктор PluginLoader.Теперь вы можете гарантировать, что объект не равен нулю.

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