在我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