将 Child Class Objects 存储在同一容器中而不丢失数据?
Storing Child Class Objects in the Same Container without loosing data?
所以假设我有一个名为 Fruits 的基础 class,
class Fruit{
public TYPE{ Apples, Oranges, Grapes, NoType };
virtual int getType(){ return Fruit::TYPE::NoType; };
virtual ~Fruits(){};
virtual int randomFunc(){ return 991; };
}
然后假设我有一个 child class 叫 Apple,
class Apple : public Fruit{
virtual int getType()override{ return Fruit::TYPE::Apples; };
virtual int childFunc(){ return -1; };
}
现在,我的问题是,是否有可能接收一个 object 与基础 class Fruits,并将各种 child object 存储在相同的 map/container 而不会失去 'childFunc()' 功能,或者任何 variables/functions 不存在于基础中?理想情况下,我试图找到类似
的东西
int FruitStorage::addFruit( Fruit* f, int i ){
this->fruitsMap[i] = *f; //I feel like receiving a base object will strip the child functionality.
return this->fruitsMap[i]->childFunc(); //I need to use the child functions after the object is stored.
}
是否可以使用模板来做这样的事情?这是一种普遍不受欢迎的做法吗?我对单独容器的问题是我需要在 first-in-first-out 基础上进行跟踪。
将 std::shared_ptr<Fruit>
存储在您的容器中。要查看是否可以依赖 childFunct(),您需要执行 dynamic_cast<Apple *>(fruit.get())
,其中 fruit 是 std::shared_ptr<Fruit>
所以假设我有一个名为 Fruits 的基础 class,
class Fruit{
public TYPE{ Apples, Oranges, Grapes, NoType };
virtual int getType(){ return Fruit::TYPE::NoType; };
virtual ~Fruits(){};
virtual int randomFunc(){ return 991; };
}
然后假设我有一个 child class 叫 Apple,
class Apple : public Fruit{
virtual int getType()override{ return Fruit::TYPE::Apples; };
virtual int childFunc(){ return -1; };
}
现在,我的问题是,是否有可能接收一个 object 与基础 class Fruits,并将各种 child object 存储在相同的 map/container 而不会失去 'childFunc()' 功能,或者任何 variables/functions 不存在于基础中?理想情况下,我试图找到类似
的东西int FruitStorage::addFruit( Fruit* f, int i ){
this->fruitsMap[i] = *f; //I feel like receiving a base object will strip the child functionality.
return this->fruitsMap[i]->childFunc(); //I need to use the child functions after the object is stored.
}
是否可以使用模板来做这样的事情?这是一种普遍不受欢迎的做法吗?我对单独容器的问题是我需要在 first-in-first-out 基础上进行跟踪。
将 std::shared_ptr<Fruit>
存储在您的容器中。要查看是否可以依赖 childFunct(),您需要执行 dynamic_cast<Apple *>(fruit.get())
,其中 fruit 是 std::shared_ptr<Fruit>