异常成员 class OOP

Exception member class OOP

我在生产代码中遇到了以下概念:

class A
{
public:
    class Exception : public std::exception
    {/* ... */};
 //...
};

没有人能给我一个明确的答案,为什么会这样。我的问题是这种做法是否符合 SOLID 规则?我认为如果此异常 class 位于 class A 之外并在创建 A 的实例时注入会更好。

您可能想阅读:https://en.cppreference.com/w/cpp/language/nested_types

因为你说 "is injected while creating the instance A",我想我需要澄清的是 Exception 被定义为内部 class 并不会使其成为 [=11 实例的成员=].如果你想让它成为 A 实例的成员,你必须在 A 中明确声明该成员:Exception m_expections;

当您说 "injected while creating the instance of A" 时,请注意 Exceptiontype,而不是 object。您不能相同class实例中有不同的类型成员。 =13=]

您可以在 class 模板的不同实例化中使用不同的类型 (即不同的 classes),但是对于这个例子,您不需要不需要模板。

classes 具有内部类型是完全正常的。您将所有辅助定义收集到一个容器中。 std::map18 member types。 Class 名称范围在这方面几乎与命名空间范围相同。

My question is whether this approach is in line with SOLID rules?

我认为没有任何东西可以维持或禁止这种情况。

由于命名和语义的原因,我仍然对此有疑问:当你像这样声明一个异常时,它唯一可能意味着 "the type of exception generated by class A"。这并不能准确地表示任何类型的错误情况(尽管我怀疑你有一个 class 真正命名为 A,所以可能由于你的示例中选择的名称而失去了意义)。

如果 class 名称确实是 "Exception",您可能应该重命名它。在 class 中定义它对我来说也没有意义(我看不出有什么理由)。