по какой-то причине я думаю о реализации интерфейса внутри некоторой функции (метода) как локального класса.
Рассмотрим следующее:
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) в отдельных файлах
- MethodToOverride просто делегирует вызов другому классу
- Класс B не должен быть виден другим пользователям
- Не нужно беспокоиться об удалении aInst, так как умные указатели используются в реальной реализации
Итак, мой вопрос: правильно ли я это делаю?
Заранее спасибо!