В моем классе FileProc у меня есть четыре функции:
ReadFile(TemplateList<char> &ReadList){}
ReadFile(TemplateListAdv<char> &ReadList){}
ReadFile(CharList &ReadList){}
ReadFile(CharListAdv &ReadList){}
Все они должны вызывать централизованный метод (в который они преобразуются):
ReadFile(TemplateListEditor<char> &ReadList){} //Contained by FileBasic
Для справочной информации иерархия классов выглядит следующим образом:
TemplateList -> CharList
TemplateList -> TemplateListAdv
CharList -> CharListAdv
TemplateList -> TemplateListEditor
FileBasic -> FileProc
Моя проблема в том, что существует рекурсивный вызов функции (где TemplateList, преобразованный в TemplateListEditor, будет продолжать вызывать функцию TemplateList), несмотря на то, что классы внутренне различны. Типирование не похоже на работу. Без переименования функции (которая победит точку, так как она должна быть универсальной), как мне заставить метод искать правильный метод?
(И я удивлен, что компилятор никогда не отмечал ошибку разрешения неоднозначности для этого).
Пример: * * один тысяча двадцать-одна
const bool ReadFile(TL::TemplateList<char> &ReadList, const bool Recursion = false)
{
printf("Is recursion true? %d!\n",Recursion);
TL::TemplateListEditor<char> Temp(ReadList);
//Calls itself instead of
//const bool ReadFile(TL::TemplateListEditor<char> &ReadList, const bool Recursion = false)
if(!ReadFile(static_cast<TL::TemplateListEditor<char> &>(Temp),true ))
{
return false;
}
return true;
}
Выше будет вывод:
Верна ли рекурсия? 0
Правда ли рекурсия? 1
Правда ли рекурсия? 1
и т.д.
Мне кажется, что TemplateListEditor (несмотря на статическое приведение и т. Д. И т. П.) Каким-то образом или по какой-то непостижимой причине преобразуется обратно в TemplateList. Все конструкторы редактора являются явными.