Re: Множественное наследование интерфейсов
От: AlexGin Беларусь  
Дата: 04.06.18 13:57
Оценка: 2 (1)
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


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

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

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


МР>
МР>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
Отредактировано 04.06.2018 14:07 AlexGin . Предыдущая версия . Еще …
Отредактировано 04.06.2018 14:05 AlexGin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.