I
Size: a a a
I
SP
I
SP
I
SP
I
SP
SP
HH
I
I
I
class base_mainВыше - эти классы пусть разбросаны по разным файлам.
{
public:
virtual ~base_main()
{
}
// some methods
};
class base_1 : virtual public base_main
{
// some methods
};
class base_2 : virtual public base_main
{
// some methods
};
class base_3 : virtual public base_main
{
// some methods
};
class object : public base_1, public base_2, public base_3
{
// some methods
};
class objects_controllerИ оповещаем подписчиков о том, что объект создан. Вопрос тут в том, что скажем у меня один из подписчиков хочет работать только с base_1 и base_2 методами, а вот другой подписчки с base_3. Скажем base_1 - это что то про рендер, base_2 - про физическое тело, base_3 - что то связанное с положением и матричными преобразованиями.
{
void create()
{
std::unique_ptr<object> obj;
// ...
for( auto listener : m_listeners )
listener->object_created( obj.get() );
}
std::list<object_controller_listener*> m_listeners;
};
listener->object_created( obj.get() );Я не хотел бы, что бы метод object_created имел сигнатуру object_created( object* ) - такая сигнатура, заставляет подписчиков знать о объекте все, даже если подписчку нужна только какая то часть
I
I
I
class objects_controller
{
void create()
{
std::unique_ptr<object> obj;
// ...
m_system_render.add( obj );
m_physic_system.add( obj );
}
std::list<object_controller_listener*> m_listeners;
// Храним всех заинтересованных
};
I
I
HH
I