异常成员 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" 时,请注意 Exception
是 type,而不是 object。您不能在相同class实例中有不同的类型成员。 =13=]
您可以在 class 模板的不同实例化中使用不同的类型 (即不同的 classes),但是对于这个例子,您不需要不需要模板。
classes 具有内部类型是完全正常的。您将所有辅助定义收集到一个容器中。 std::map
有 18 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 中定义它对我来说也没有意义(我看不出有什么理由)。
我在生产代码中遇到了以下概念:
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" 时,请注意 Exception
是 type,而不是 object。您不能在相同class实例中有不同的类型成员。 =13=]
您可以在 class 模板的不同实例化中使用不同的类型 (即不同的 classes),但是对于这个例子,您不需要不需要模板。
classes 具有内部类型是完全正常的。您将所有辅助定义收集到一个容器中。 std::map
有 18 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 中定义它对我来说也没有意义(我看不出有什么理由)。