对于我的项目,我有这个类结构:
class Base
{
enum class type
{
Derived1,
Derived2
}
int getType() {return type;};
type type;
//general methods & attributes
}
class Derived1 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived1();
}
class Derived2 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived2();
}
class Core
{
vector<unique_ptr<Base>> tab;
void iterate();
}
void Core::iterate()
{
tab.emplace_back(new Derived1());
tab.emplace_back(new Derived2());
vector<unique_ptr<Base>>::iterator it;
for (it = tab.begin(); it != tab.end(); ++it)
{
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived1(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived2(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
}
}
我的问题是我无法在此向量中达到派生类的特定方法。我不想使用多态,因为这些函数完全不同,其他派生类也不需要。
我怎么能这样做?
答案 0 :(得分:1)
我的问题是我无法在此向量中找到派生类的特定方法。我不想使用多态,因为这些函数完全不同,其他派生类也不需要。
我怎么能这样做?
该语言提供了两种机制,可以在给定指向基类的指针/引用的情况下访问派生类中的函数。
div#styled-select
直接访问派生类函数。您可以构建一些函数层,允许您在不使用dynmaic_cast
显式使用客户端代码的情况下访问派生类的直接接口,但如果不使用多态,则必须在某些时候使用dynamic_cast
一个选项。
以下是直接使用dynamic_cast
的代码的更新版本。
dynamic_cast