c++ - 如何在 C++ 中检查对象的类型(它们属于哪个类)
问题描述
我遇到的问题就是这个。我有一个 Event 类型的数组(Event 是 Conference 类的基类)。在数组中我放了 5 个对象(在我的例子中,三个是 Event 类型,两个来自 Conference)。在练习中,我被要求创建两个二进制文件,一个用于 Event 类型的对象,一个用于 Conference 类型的对象。接下来我必须检查数组中对象的类型,如果它来自 Event 类型,则将其写入 Events.bin(事件类型对象的二进制文件),如果它们是 Conference 类型,则将其写入 Conference.bin。为此我使用typeid()
但是当我读取文件时,而不是 Events.bin 中的三个对象,我在那里有五个对象,另一个文件也是如此。这是我用来检查类型并将它们写入文件的代码:
for (int k = 0; k < N; k++) {
if (typeid(arr[k]) == typeid(Conference)) {
boutconferences.write((char*)&arr[k], sizeof(Conference));
}else {
boutevents.write((char*)&arr[k], sizeof(Event));
}
}
第二次尝试:
for (int k = 0; k < N; k++) {
if (typeid(arr[k]) == typeid(Conference)) {
boutconferences.write((char*)&arr[k], sizeof(Conference));
}
if(typeid(arr[k])==typeid(Event)) {
boutevents.write((char*)&arr[k], sizeof(Event));
}
}
两者都做同样的事情
提前致谢。
解决方案
推荐阅读
- android-fragments - 如何取消订阅 RxKotlin/RxJava 中的 Flowable?
- c++ - 静态 std::unordered_map 的默认值
- sql - PostgreSQL 输出到 JSON 对象/数组
- symfony - Symfony QueryBuilder setParameters 替换值
- css - 在 webkit 中调整中文
- php - Codeigniter 上传到主机后无法登录管理员
- apache-spark - 添加 spark-redis 连接器作为依赖项的问题
- python - 与 Python 中提供的参考列表匹配的近似字符串
- java - Spring Data @OneToMany 与@JoinTable 的关系 - 如何修复外键约束违规?
- javascript - Web API 通知 requireInteraction 在 Windows 的 Electron App 中不起作用