XaeroX писал: mittorn
Моды пусть их авторы исправляют - разве не логично?
В конце концов, кому нужно, чтобы в их моды играли - им или тебе?
Да уж, сидеть ждать всех остальных это очень хорошая политика.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Таки автомат за тебя не решит, какого класса ф-ю тебе надо запускать. Случается, что функции перегружены. Я даже как-то баг нашёл, что запускается не CBaseEntity::MyThink(), а CMyEntityParent::MyThink(). Много часов я в своё время промучился. Даже пытался макрами это дело исправить. Но универсального способа для всек компиляторов не нашлось.
~ X ~ писал: Я даже как-то баг нашёл, что запускается не CBaseEntity::MyThink(), а CMyEntityParent::MyThink().
А можно поподробнее об этом баге?
Впервые слышу, чтобы выбиралась функция родителя при наличии переопределённой функции в потомке. Разве что сигнатуру по ошибке другой сделал?
XaeroX это не баг, это такое место, в котором легко допустить и не заметить ошибку.
Например, возможны вот такие варианты:
SetThink(&CBaseEntity::SUB_UseTargets);
SetThink(&CBaseDelay::SUB_UseTargets);
SetThink(&CBasePlat::SUB_UseTargets);
А раньше это выглядело как
SetThink(SUB_UseTargets);
SetThink(SUB_UseTargets);
SetThink(SUB_UseTargets);
И при портирвоании надо включать голову: что где вызывается и правильно ли.
XaeroX тут появляется ещё одна кака: если я переопределяю virtual void EXPORT SUB_UseTargets(); в классе CFuncTrackTrain, в коде которого встречается SetThink(&CBaseDelay::SUB_UseTargets);, надо будет руками пройтись по всему коду и проверить чтобы вызывался оверлоуд, а не базовая версия. По этой причине новый "explicit" вариант мне не нравится.
~ X ~
А это признак плохой архитектуры, если тебе надо вызывать частично код из функции родителя. В таких случаях его выносят в новую функцию и вызывают её.
XaeroX ты нипрафф: мне надо, например запретить вызов CBaseEntity::SUB_UseTargets у всех потомков CBasePlat потому что у них используются другие поля для тагретов, а поле "таргет" - для указания следующего участка пути (пример). И это категорически важно, иначе у меня поезда сквозь гаргов летают по всей карте.