Прежде всего, я рекомендую использовать исключения для управления ошибками.У вас может быть один тип исключения, который используется в одностороннем порядке в вашем приложении, или вы можете создать иерархию типов исключений, которые специализируются для определенных классов.
Если вы не хотите идти по этому маршруту, вы можетепо-прежнему избавляясь от необходимости реализовывать специальную функцию получения ошибок в каждом из ваших классов, вы можете использовать наследование довольно безболезненно.Просто создайте базовый класс, от которого наследуются все объекты с управлением ошибками, и один раз реализуйте метод получения в базовом классе:
class ErrorManager
{
const Error& getError();
void setError( Error& err ); // Or however you would actually set the error
}
class Widget : public ErrorManager
{
// Implementation details
}
Widget w;
w.getError()
Хотя вы думаете, что наследование кажется неправильным, оно действительно вполне уместно.Вы правы, что диалог не является ошибкой.Тем не менее, он имеет have-a Error, и вы можете управлять взаимодействием с этой ошибкой, используя наследование.Поэтому ваш диалог является ErrorManager, поскольку он использует общую структуру для управления своими ошибками.
Удачи!