Реализовать абстрактный класс как локальный класс? за и против

по некоторым причинам я думаю при реализации интерфейса в некоторой функции (метод) как локальный класс.

Рассмотрите следующее:

class A{
public:

    virtual void MethodToOverride() = 0;

};

A * GetPtrToAImplementation(){

    class B : public A {
    public:
        B(){}
        ~B(){}

        void MethodToOverride() {
            //do something
        }
    };

    return static_cast<A *>(new B());
}


int _tmain(int argc, _TCHAR* argv[])
{

    A * aInst = GetPtrToAImplementation();

    aInst->MethodToOverride();

    delete aInst;
    return 0;
}

причины, почему я делаю это:

  1. Я ленив для реализации класса (B) в отдельных файлах
  2. MethodToOverride просто делегирует вызов к другому классу
  3. Класс B не должен быть видим другим пользователям
  4. никакая потребность волноваться об удалении aInst начиная с интеллектуальных указателей не используется в реальной реализации

Таким образом, мой вопрос состоит в том, если я делаю это правильно?

Заранее спасибо!

5
задан sinek 17 March 2010 в 14:26
поделиться

1 ответ

  1. Вы можете определить B в безымянном пространстве имен файла реализации, где вы реализуете GetPtrToAImplementation () .

  2. должен иметь виртуальный dtor.

  3. Согласно текущему стандарту C ++, вы не можете использовать локальные классы в качестве аргументов шаблона. (Это означает, что вы не можете использовать их, например, с STL.)

5
ответ дан 14 December 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: