Typeid问题,以确定要处理的数据
Typeid issues to determine what data is processed
为什么返回false,如何修复?我正在尝试制作一个程序,将数据写入文件,然后可以读取并显示该文件。此外,还有3个类。一个是父类(未显示MyEmployee),Hourly和Salared类是子类。
for (int i = 0; i < ARRAY_SIZE; i++)
{
MyEmployee* empPtr = payroll[i];
if (typeid(*empPtr) == typeid(Hourly))
{
Hourly* empHPtr = static_cast<Hourly*>(empPtr);
}
else if (typeid(*empPtr) == typeid(Salaried))
{
Salaried* empSPtr = static_cast<Salaried*>(empPtr);
}
}
for (int i = 0; i < ARRAY_SIZE; i++)
{
payroll[i]->writeData(myWrittenFile);
}
我猜你的类层次结构是:
struct MyEmployee { virtual ~MyEmployee() {}; /* ... */ };
struct Hourly : MyEmployee { /* ... */ };
struct Salaried : MyEmployee { /* ... */ };
如果是这样,那么您可以将代码替换为:
MyEmployee *empPtr = payroll[i];
Hourly *empH = dynamic_cast<Hourly *>(empPtr);
Salaried *empS = dynamic_cast<Salaried *>(empPtr);
如果对象不是该类型,则empH
和empS
将为null;以及一个有效的指针(如果它是那种类型的话)。
当然,正如chris所建议的那样,用一个虚拟函数来代替整个功能可能会更好。
如果MyEmployee
是多态的,请使用dynamic_cast < type-id > ( expression )
此操作将操作数表达式转换为id类型的对象,如果转换失败,将返回0。
MyEmployee* empPtr = payroll[i];
if (dynamic_cast<Hourly*>(empPtr))
{
...
}
相关文章:
- 使用流处理接收到的数据
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 我可以使用哪种数据结构来处理这种方式
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 在线程函数中处理数据向量时进行线程竞速
- 而(getline(fin,str)){}即使在到达eof之后仍在处理数据
- 如何以低于相机每秒帧数的能力处理数据?
- 处理数据包的设计模式
- C 图像处理数据块进入数组 /指针
- 如何使用 C++ 驱动程序在 MongoDB 中使用 UserException 处理数据类型错误
- 实时绘图的信号处理数据(c++中的FFT和GNUPLOT)
- 处理数据的方法,速度是我处理速度的两倍
- 如何使用STL迭代器和reverse_iterator处理数据
- MFC树视图控件:寻找一种万无一失的方法来处理数据
- 从套接字递归处理数据
- boost::p roperty_:tree - 解析和处理数据
- 这段代码是否在作为参数传递时处理数据有点困惑
- 神经网络似乎工作得很好,直到用于处理数据(所有的结果几乎是相同的)
- 在托管c#应用程序的非托管c++ Dll调用中,如何处理数据类型之间的冲突