по некоторым причинам я думаю при реализации интерфейса в некоторой функции (метод) как локальный класс.
Рассмотрите следующее:
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;
}
причины, почему я делаю это:
Таким образом, мой вопрос состоит в том, если я делаю это правильно?
Заранее спасибо!
Вы можете определить B
в безымянном пространстве имен файла реализации, где вы реализуете GetPtrToAImplementation ()
.
должен иметь виртуальный dtor.
Согласно текущему стандарту C ++, вы не можете использовать локальные классы в качестве аргументов шаблона. (Это означает, что вы не можете использовать их, например, с STL.)