Как определить тип класса, который динамически связан с другим классом?
Я нашел решение, единственная проблема в том, что мне пришлось использоватьопределение, которое должно использоваться во всех производных классах.
Есть ли более простой способ сделать это, не требуя поддержки для добавленного класса?
Важно отметить: и класс, и связанный класс всегда будут иметь свой соответствующий базовый класс, разные классы могут совместно использовать связанный класс, и, как в примере, я бы хотел, чтобы класс управления владел видом
Это то, что у меня есть сейчас.Единственное, что мне нужно, - это переключение, но я бы хотел, чтобы он был, поэтому мне нужно только добавить код, чтобы вернуться и изменить его.
#include <iostream>
#include <string>
class model
{
public:
model( int id ) : id(id) {}
int id;
};
class view
{
public:
view( model *m ) {}
virtual std::string display()
{
return "view";
}
};
class otherView : public view
{
public:
otherView( model *m ) : view(m) {}
std::string display()
{
return "otherView";
}
};
class control
{
public:
control( model *m ) : m_(m), v_( createRelated() ) {}
~control()
{
delete v_;
}
std::string display()
{
if ( v_ )
return v_->display();
return "No view";
}
view *createRelated()
{
switch( m_->id )
{
case 0:
return new view( m_ );
case 1:
return new otherView( m_ );
default:
return NULL;
}
}
model *m_;
view *v_;
};
int main( void ) {
model m(0);
model om(1);
model nm(2);
control c1( &m );
control c2( &om );
control c3( &nm );
std::cout << c1.display() << std::endl;
std::cout << c2.display() << std::endl;
std::cout << c3.display() << std::endl;
}