std::list static_cast派生迭代器
std::list static_cast derived iterator
我有一个定义为:的列表
std::list<CExcited*> mExcitedList;
兴奋定义为:
class CExcited
{
public:
CExcited::CExcited(){}
virtual int getAnswer() = 0;
};
我有一个派生类:
class CExcitedA :: public CExcited
{
public:
CExcitedA::CExcitedA(){}
int getAnswer() {return 1;}
};
另一个:
class CExcitedB :: public CExcited
{
public:
CExcitedB::CExcitedB(){}
int getAnswer() {return 2;}
};
我在列表中添加了一些元素
CExcitedA* excitedA = new ExcitedA();
mExcitedList.add_back(excitedA);
CExcitedB* excitedB = new ExcitedB();
mExcitedList.add_back(excitedB);
当我迭代列表时,我无法在运行时找出我添加了哪个类。
我已经尝试了没有用
for (std::list<Excited*>::iterator iter = mExcitedList.begin(); iter != mExcitedList.end(); iter++)
{
if (typeid(*iter) == typeid(CExcitedA*))
{
}
if (typeid(dynamic_cast<CExcitedA*>(*iter)) == typeid(CExcitedA*))
{
}
}
这似乎应该是直接的,但我不能得到它
从这里编辑,带有答案
CExcitedA* testA = dynamic_cast<CExcitedA*> (*iter);
if (testA != 0)
{
std::cout << "ES: " << dynamic_cast<CExcitedA*> (*iter)->getAnswer() << std::endl;
}
CExcitedB* testB = dynamic_cast<CExcitedB*> (*iter);
if (testB != 0)
{
std::cout << "EB: " << dynamic_cast<CExcitedB*> (*iter)->getAnswer() << std::endl;
}
您已经有了区分类类型的方法,为什么不使用它呢?
for (std::list<Excited*>::iterator iter = mExcitedList.begin(); iter != mExcitedList.end(); iter++){
{
int classType = iter->getAnswer();
switch (classType) {
case 1: cout << "class A";
break;
case 2: cout << "class B";
break;
default: cout << "unknown class";
}
}
还有运行时类型id检查:typeid(*iter).name(),它将为您提供"类名"
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- 由于从 std::map 派生的类中的 std::map 迭代器导致的内存错误
- 通过迭代器调用功能无法在派生对象上编译
- 派生自推力框架的高级迭代器(推力::zip_iterator)
- 规则迭代器(或类似的范围/视图类)是否应从const_iterator派生
- 迭代器无法访问派生类的成员方法
- 在 QList 派生类的每个迭代器中将'this'作为第二个参数
- 如何向派生类对象声明迭代器
- std::list static_cast派生迭代器
- MFC容器中的find_if,迭代器派生自std::iterator
- 如何在c++中的派生类中实现迭代器
- 如何从 unique_ptr 向量获取派生迭代器<Base>?
- 在c++中通过std迭代器将基类强制转换为派生类