在我FileProc類,我有四個功能:子類遞歸方法調用
ReadFile(TemplateList<char> &ReadList){}
ReadFile(TemplateListAdv<char> &ReadList){}
ReadFile(CharList &ReadList){}
ReadFile(CharListAdv &ReadList){}
這些都是應該調用一個集中的方法(它們轉換成):
ReadFile(TemplateListEditor<char> &ReadList){} //Contained by FileBasic
有關背景信息類的層次結構如下:
TemplateList - > CharList
TemplateLis筆 - > 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。編輯的構造函數都是明確的。
你能舉一個你的意思嗎? –
嵌入它有點困難。我會盡力。但基本上,編譯器以某種方式將TemplateListEditor翻譯成TemplateList ... aha ...複製構造函數不是顯式的......我希望它們不是......(對不起,它們是明確的,同樣的問題。 ) – SSight3