Допустим есть базовый класс StyleableElement. Мне нужно от него два метода. Но проблема такая что тип не полный. И соответсвеенно напрямую я не могу его получить.
Есть для примера следующая функция в шаблонном классе:
void SaveBaseState(StyleableElement& stateOwner, StyleableElement& target) const override
{
auto& owner = static_cast<TOwner&>(stateOwner);
if(!owner.HasBaseState(_property)) // UB или нет?
{
// other code
}
}
TOwner это всегда минимум StyleableElement.
Например пусть:
Тип stateOwner - Button, а TOwner - TextBlock. т.е типы не совместимы но при этом они оба StyleableElement. И если я потом вызываю у owner метод класса StyleableElement, то будет UB или нет.
Варианты так не делать (но мне теоритически интересно UB это или нет) тоже есть. По крайней мере я придумал два:
1) Интерфейс
2) Вместо методов использывать friend функции и объявить их в начале заголовочного файла. (почему так нельзя и объявить методы не понимаю)