Что вы думаете о создании исключения для не найденного в C ++? - PullRequest
12 голосов
/ 27 сентября 2008

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

class list {
    public:
        value &get(type key);
};

Давайте подумаем, что вы не хотите, чтобы в общедоступном интерфейсе класса были замечены опасные указатели. Как вы возвращаете в этом случае значение not found, выдавая исключение?

Как вы к этому подходите? Вы возвращаете пустое значение и проверяете его пустое состояние? Я на самом деле использую метод броска, но я ввел метод проверки:

class list {
   public:
      bool exists(type key);
      value &get(type key);
};

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

Как бы вы это сделали?

Ответы [ 11 ]

0 голосов
/ 27 сентября 2008

Интересный вопрос. Я полагаю, что в C ++ проблема заключается исключительно в использовании ссылок - в Java ссылки более гибкие и могут быть нулевыми. Я не могу вспомнить, допустимо ли в C ++ использовать нулевую ссылку:

MyType *pObj = nullptr;
return *pObj

Но я считаю это опасным. Опять же, в Java я бы выбросил исключение, поскольку это часто встречается там, но я редко вижу исключения, которые так свободно используются в C ++. Если бы я создавал puclic API для повторно используемого компонента C ++ и должен был возвращать ссылку, я бы пошел по пути исключения. Мое реальное предпочтение - чтобы API возвращал указатель; Я считаю указатели неотъемлемой частью C ++.

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