【发布时间】:2013-09-04 18:44:10
【问题描述】:
我正在尝试编写一些通用代码:
int _pID = _plant->getPlantInternalID();
std::string _plantName = getPlantBasedUponInternalID(_pID);
_plantName 返回植物的字符串,如Broccoli
但是有没有办法做这样的事情:
for (int f=0; f < _f.getPlants().size(); f++)
{
std::shared_ptr<Plant> sbas = _f.getPlants().at(f);
std::shared_ptr<_plantName> sder2 = std::dynamic_pointer_cast<_plantName>(sbas);
}
请注意,我输入的是 _plantName,但实际上我需要执行以下操作:
std::shared_ptr<Broccoli> sder2 = std::dynamic_pointer_cast<Broccoli>(sbas);
什么需要做这样的事情,我该如何完成它?
更新:我只是根据我制作的内部 ID 获取 ID:
std::string HUDForStatus::getPlantBasedUponInternalID(int _id)
{
switch (_id)
{
case 114: // Asparagus
return ASPARAGUS::plantName.c_str();
break;
case 113: // Beets
return BEETS::plantName.c_str();
break;
case 115: // Bok Choy
return BOKCHOY::plantName.c_str();
break;
case 107: // Broccoli
return BROCCOLI::plantName.c_str();
break;
case 101: // Carrot
return CARROT::plantName.c_str();
break;
case 110: // Celery
return CELERY::plantName.c_str();
break;
case 103: // Corn
return CORN::plantName.c_str();
break;
case 116: // Eggplant
return EGGPLANT::plantName.c_str();
break;
case 102: // Green Beans
return GREENBEANS::plantName.c_str();
break;
... <snip>...
}
}
【问题讨论】:
-
所以 _plantName 是一个字符串,你想从中获取一个类型吗?
getPlantBasedUponInternalID如何确定要返回的字符串?我想如果您可以从 ID 中获取类型,那您为什么不这样做呢? -
我做了一个更新,你可以看到。所以你说的只是创建一个函数,它根据 ID 返回
shared_ptr,就像我对字符串所做的那样。我没有想到,我猜很简单。 -
为什么需要这个?为什么不能只使用 Plant* 类型的指针?
-
BROCCOLI 实际上是一个命名空间,我在其中存储了每个对象在创建时具有的一堆常量。
-
如果有什么神奇的方法可以做到这一点,那么
sder2->member是否可以编译将取决于运行时字符串_plantName。