我有2个派生类,在这些类之一中,我想自定义基础嵌套类的实现。另一方面,我只想使用基础对象。

我遇到了一个可以通过以下示例演示的问题:

class Widget
{
public:
    class Settings
    {
        // ...
    }

// ...

protected:
    Settings m_settings;
}

// -------------------------------------------------------

class LimitedWidget : public Widget
{
    // ...

    // the settings are the same, so using base m_settings object.
}

// -------------------------------------------------------

class SpecialWidget : public Widget
{
public:
    class Settings : public Widget::Settings
    {
        // customize the settings for SpecialWidget
    }

// ...

protected:
    Settings m_settings; // now I must declare another m_settings object.
}


嗯,这是多余的。我们已经在基类m_settings中定义了Widget,但是我不想在所有派生类(例如SpecialWidget)中使用它。我不能在基类中将m_settings设为私有,因为我想在LimitedWidget中使用该对象。但我不想在SpecialWidget中使用2个设置对象,其中之一是无用的。

有解决方案吗?

感谢您的时间。

最佳答案

您可以尝试这样的事情:

class Widget
{
  ...

  protected:
    Settings* m_settings;

  public:

    void initialize()
    {
      m_settings = createSettings();
    }

  protected:

    virtual Settings* createSettings()
    {
      return new Settings();
    }

  ...

} // class Widget


接着:

class SpecialWidget: public Widget
{
  public:

    class SpecialSettings: public Settings
    {
        // customize the settings for SpecialWidget
    }

  protected:

    Settings* createSettings()
    {
      return new SpecialSettings();
    }

} // class SpecialWidget


换句话说,基类在initialize方法内创建默认设置,您的特殊小部件将覆盖此默认设置,从而创建特殊设置。

关于c++ - 如何解决由继承和嵌套类引起的冗余?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56063575/

10-11 23:16
查看更多