Подтвердить что ты не робот

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

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

Например:

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

или

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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