C++使用指向父类(super class)的指针查找子类的类型

标签 c++ pointers raytracing

在我的 C++ 代码中,我有一个指向 Light 对象的指针 vector 。 P_Light 是 Light 的子类,并且有一个字段位置。对于每个指向实际上是 P_Light 的 Light 的指针,我需要对位置字段做一些事情。我做了一些搜索,似乎我可以实现一个虚拟方法,但我不需要 Light 中的方法,因为其他类型的 Light 没有位置。我也考虑过选角,但我不确定如何让它发挥作用。

std::vector<Vector> light_dirs;
for(int i=0; i<lights.size; i++){
    Light *l = lights[i];   
    //cast here?
}

编辑: 在另一篇文章中看到,也许使用 qobject_cast 是个好主意。这样看起来更好吗?

std::vector<Vector> light_dirs;
for(int i=0; i<lights.size; i++){
    Light *l = lights[i];   
    P_Light* pl = qobject_cast<P_Light*>(l);
    if(pl != nullptr) //dostuff;
}

最佳答案

这应该有效。

P_Light* p_light = dynamic_cast<P_Light*>(l);

https://en.wikipedia.org/wiki/Run-time_type_information 上检查 RTTI 和动态转换

关于C++使用指向父类(super class)的指针查找子类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471345/

相关文章:

python - 从 C++ 执行 .py 文件

c++ - 将有根层次结构的对象存储在 vector 中

c - 具有数据结构的双指针运算

c++ - 什么会导致 Phong 镜面反射着色产生色域溢出?

math - 你如何计算入射角?

c++ - 如何在 C++ 中异步执行 curl_multi_perform()?

c++ - 无法在 C++ 中使用迭代执行 for 循环

c++ - Go:使用 C++ 库:包含 <string> 的错误

c++ - 指向不同类型的指针可以有不同的二进制表示吗?

javascript - 如何在 Three.js 中加载 json 对象数组?