Я получаю сообщение об ошибке: «A» является недоступным основанием «B» в static_cast
следующего примера:
Ожидается: B
является производным от A<B>
, но это наследование защищено: только B
и его производные классы могут использовать факт B
является производным от A<B>
.
Но он компилируется / работает хорошопри использовании reinterpret_cast
(...).Правильно ли это поведение?
Это ожидается: reinterpret_cast
не заботится о наследовании или других отношениях между типами.
Если возможно, reinterpret_cast
просто дает вам указатель сто же значение (указывающее на тот же байт), что и исходное значение указателя.
Это просто скрывает проблему.
Но оно компилируется / работает хорошопри использовании (...) C-style type cast ((Derived *)this)->funB()
вместо этого.Правильно ли это поведение?
Ожидается: приведения в стиле C игнорируют контроль доступа. Это просто скрывает проблему.
Исправление состоит в том, чтобы сделать отношение наследования между A<B>
и B
доступным там, где вы хотите его использовать.