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

Сообщение Re[6]: Множественное наследование интерфейсов от 29.05.2018 14:05

Изменено 29.05.2018 14:07 sergii.p

Re[6]: Множественное наследование интерфейсов
Здравствуйте, Maniacal, Вы писали:

M>A* в B* не конвертируется, естественно, это C* конвертируется в A* и в B*, что и нужно проверить


M>
M>class A
M>{
M>};

M>class B
M>{
M>};

M>class C : public A
M>{
M>};

M>class D : public A, public B
M>{
M>};

M>int main()
M>{
M>    if (std::is_convertible<C*, A*>::value) puts("C convertible to A"); // true
M>    if (std::is_convertible<C*, B*>::value) puts("C convertible to B"); // false
M>    if (std::is_convertible<D*, A*>::value) puts("D convertible to A"); // true
M>    if (std::is_convertible<D*, B*>::value) puts("D convertible to B"); // true
M>    return 0;
M>}
M>


ну а в стартовом сообщении спрашивается совсем другое. Имеем указатель на базовый класс (INotifiable) и хотим проверить, а объект который скрывается за этим базовым классом поддерживает ли ещё и ISerializable. Эту информацию без RTTI не получить.
Re[6]: Множественное наследование интерфейсов
Здравствуйте, Maniacal, Вы писали:

M>A* в B* не конвертируется, естественно, это C* конвертируется в A* и в B*, что и нужно проверить


M>
M>class A
M>{
M>};

M>class B
M>{
M>};

M>class C : public A
M>{
M>};

M>class D : public A, public B
M>{
M>};

M>int main()
M>{
M>    if (std::is_convertible<C*, A*>::value) puts("C convertible to A"); // true
M>    if (std::is_convertible<C*, B*>::value) puts("C convertible to B"); // false
M>    if (std::is_convertible<D*, A*>::value) puts("D convertible to A"); // true
M>    if (std::is_convertible<D*, B*>::value) puts("D convertible to B"); // true
M>    return 0;
M>}
M>


ну а в стартовом сообщении спрашивается совсем другое. Имеем указатель на базовый класс (INotifiable) и хотим проверить, а объект, который скрывается за этим базовым классом, поддерживает ли ещё и ISerializable. Эту информацию без RTTI не получить.