Частный вложенный абстрактный класс C ++

Так что, возможно, это глупый вопрос, и я слишком долго обдумываю это, но у меня следующая ситуация. Я делаю «оболочку класса», которая может запускать абстрактные объекты «действия класса». Это единственный класс, который должен создавать или использовать эти объекты. Объекты действий нуждаются в доступе к оболочке для выполнения определенных действий с ней, но я стараюсь не добавлять для этого общедоступные интерфейсы (это не должно быть разрешено никому).

Изначально у меня был простой (не такой элегантный)

class Shell
{
 public:
    bool checkThing();
    // etc...
 private:
    bool _thing;
};

class Action
{
 public:
    virtual void execute( Shell &s )=0;
};

class ChangeAction : public Action
{
 public:
    void execute( Shell &s )
    {
        // requires friendship or public mutator!
        s._thing = true;
    }
};

Поэтому я рассматривал вложенный класс Action, но я хотел сделать его закрытым (зачем позволять кому-либо делать конкретные Действия, кроме Shell, верно?)

class Shell
{
 public:
    bool checkThing();
    // etc...
 private:
    bool _thing;
    class Action;
};

class Shell::Action
{
 public:
    virtual void execute( Shell &s )=0;
};

class ChangeAction : public Shell::Action
{
 public:
    void execute( Shell &s )
    {
        // ok now!
        s._thing = true;
    }
};

Но конечно, я больше не могу наследовать от Action (что имеет смысл, это приватно). Так что это не сработает.

Итак, мой вопрос, следует ли мне просто использовать первый метод и дружбу или открытый интерфейс? Могу ли я использовать что-то похожее на второй метод, чтобы сохранить эту связь с Actions и Shell? я должен просто использовать первый метод и дружбу или публичный интерфейс? Могу ли я использовать что-то похожее на второй метод, чтобы сохранить эту связь с Actions и Shell? я должен просто использовать первый метод и дружбу или публичный интерфейс? Могу ли я использовать что-то похожее на второй метод, чтобы сохранить эту связь с Actions и Shell? У вас есть идея получше?

7
задан Matt 16 February 2011 в 07:05
поделиться