Я столкнулся со странным случаем при разработке моего дерева наследования объектов C ++ в проекте. Я ожидал, что нижеприведенное не поможет:
struct A {
protected:
struct C { };
};
struct B: A {
struct C { };
};
Но, это компилируется просто отлично. Это как переопределение? Я могу видеть, как это не является двусмысленным, потому что они могут быть определены как A::C
и B::C
, но как это действует в полиморфных случаях? Будет ли он вызывать C предписанного типа или C типа экземпляра? Например, предположим, что приведенный ниже код работает и func
существует в обеих реализациях C:
A x = B();
decltype(x)::C::func();
какой C назвал бы их функцию? В более общем смысле, это ресурс, который описывает, как разрешаются подобные фрагменты кода?