异常成员类OOP

时间:2018-07-02 06:11:29

标签: c++ oop object solid-principles

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

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

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

3 个答案:

答案 0 :(得分:2)

当您说“在创建A实例时注入”时,请注意Exception类型,而不是 object 。在相同类的实例中,您不能具有不同的 type 成员。

您可以在类模板的不同实例中使用不同的类型(即不同的类),但是对于本示例,您不需要模板。

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

答案 1 :(得分:1)

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

因为您说“是在创建实例A时注入的”,所以我想澄清一下,Exception被定义为内部类并不能使其成为A实例的成员。 。如果要使其成为A实例的成员,则必须在A中明确声明该成员:Exception m_expections;

答案 2 :(得分:0)

  

我的问题是这种方法是否符合SOLID规则?

我认为没有SOLID支持或禁止这种情况。

由于命名和语义,我仍然会遇到一个问题:当您声明这样的异常时,它唯一的含义就是“由类A生成的异常类型”。这不能准确表示任何类型的错误情况(尽管我怀疑您有一个真正命名为A的类,所以可能由于示例中选择的名称而失去了含义)。

如果类名确实是“ Exception”,则应将其重命名。在类中定义它对我来说也没有意义(我看不出有任何理由)。