Информация об изменениях

Сообщение Re: Множественное наследование интерфейсов от 04.06.2018 13:57

Изменено 04.06.2018 14:07 AlexGin

Re: Множественное наследование интерфейсов
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Подскажите, пожалуйста, что почитать по теме дизайна использующего множественное наследование интерфейсов?

МР>Какие паттерны там применяются?

МР>Например, как решается такая задача


МР>
МР>class INotifiable {
МР>public:
МР>   virtual void notify() =0;
МР>};

МР>class ISerializable {
МР>public:
МР>   virtual void serialize() =0;
МР>};

МР>shared_ptr<INotifiable> obj = ...;

МР>if ( obj поддерживает еще и интерфейс ISerializable ) {
МР>   сохранить obj в файл
МР>}
МР>

МР>Просто с помощью dynamic_cast?

Есть поддержка:
std::dynamic_pointer_cast<ISomeInterface>(obj) // Начиная от C++11

Ну и если уже "ударять кувалдой":
std::reinterpret_pointer_cast<ISomeInterface>(obj) // Начиная от C++17

 shared_ptr<ISerializable> objSer = std::dynamic_pointer_cast<ISerializable>(obj);


http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast
http://www.cplusplus.com/reference/memory/dynamic_pointer_cast
Re: Множественное наследование интерфейсов
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Подскажите, пожалуйста, что почитать по теме дизайна использующего множественное наследование интерфейсов?

МР>Какие паттерны там применяются?

МР>Например, как решается такая задача


МР>
МР>class INotifiable {
МР>public:
МР>   virtual void notify() =0;
МР>};

МР>class ISerializable {
МР>public:
МР>   virtual void serialize() =0;
МР>};

МР>shared_ptr<INotifiable> obj = ...;

МР>if ( obj поддерживает еще и интерфейс ISerializable ) {
МР>   сохранить obj в файл
МР>}
МР>

МР>Просто с помощью dynamic_cast?

Есть поддержка:
std::dynamic_pointer_cast<ISomeInterface>(obj); // Начиная от C++11

Ну и если уже "ударять кувалдой":
std::reinterpret_pointer_cast<ISomeInterface>(obj); // Начиная от C++17
Reinterpret — это на тот случай, если классы НЕ связаны отношением наследования

 shared_ptr<ISerializable> objSer = std::dynamic_pointer_cast<ISerializable>(obj);


http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast
http://www.cplusplus.com/reference/memory/dynamic_pointer_cast