Где определить классы исключений, внутри классов или на более высоком уровне? - PullRequest
13 голосов
/ 25 декабря 2010

Должны ли классы исключений быть частью класса, который может их выбросить, или они существуют на более высоком уровне?

Например:

class Test
{
    public:
        class FooException: public ExceptionBase { };
        void functionThrowingFooException();
};

или

class FooException: public ExceptionBase { };
class Test
{
    public:
        void functionThrowingFooException();
};

(functionThrowingFooException() - единственная функция, которая когда-либо выбрасывает FooException)

Ответы [ 2 ]

4 голосов
/ 25 декабря 2010

Исключения действительно моделируют условия ошибки. Они специфичны для каждого класса? Что если вам нужно вызвать исключение из бесплатной функции?

Если вы идете по пути предоставления разных типов исключений для различных состояний проблемы - проанализируйте / перечислите эти состояния ошибок, назовите исключения после них, поместите все данные о состоянии в эти типы исключений, получаются из подкласса std::exception, затем объявите в отдельном заголовке.

0 голосов
/ 25 декабря 2010

Я думаю, что все дело в личном вкусе (на самом деле форма соглашения о кодировании).

Я предпочитаю размещать их вне определения класса, но это, вероятно, потому, что так происходит в BCL .NET.

Опять же, если это исключение используется только там ... Есть ли причина для исключения?

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