此问题是关于用不同返回类型覆盖派生类中的虚拟方法的问题。 对于下面的代码:重写虚拟方法时无法返回派生类指针
class father {
public:
virtual father* ref() { return this; }
};
class child : public father {
virtual child* ref() { return this; }
};
当我尝试直接获取一个指针,G ++(F15,G ++ 4.5)报告 “无效的转换,从父亲的孩子”
child m_child;
father* pf = &m_child;
child* pc = pf->ref();
我明白使用子类中的ref()方法,这可能只是编译时类型不匹配。
但是,有没有办法做到这一点,而不明确使用类型转换?
额外描述: 我明白编译器报告此错误的原因。我需要的是可以访问派生对象中的数据而不显式转换指针的开箱即用的东西。
父类用于将不同的派生子对象放入列表或向量中,所以当从列表或向量中获取某个项时,无法确定它属于哪个子类。
我有内部方法来记录和检查子类的类型。但我不想显式地转换指针。
例如,我愿做这样的事情:
// assuming pf is pointer pointed to an item fetch from a vector
switch(fp->get_type()) {
case child_type1: fp->ref()->list1.push(data); break;
case child_type2: fp->ref()->list2.push(data); break;
case child_type3: fp->ref()->list3.push(data); break;
}
现在,我需要显式声明一个新的变量或显式转换FP在每种情况下,每个我需要时间正确的类型和访问派生类中的数据,这是枯燥乏味的。
我期望的是:可能是一些boost库可以以另一种我还不知道的方式做类似的事情,或者可能是C++ 11标准允许它,但需要设置一个特殊的编译参数?
我想我很理解为什么编译器报告类型不匹配。我需要的不是对这里发生的事情的解释。我需要一些开箱即用的东西。为了进一步解释它,请参阅添加的额外说明。 – 2012-04-04 13:41:38