c++ - 将不同类类型的数组传递给函数并循环它们
问题描述
我是 C++ 新手,来自 python。
我正在开发一个光线追踪程序,它可以遍历场景中的对象列表。
我知道这个“伪代码”不起作用,它将说明我想要做什么:
class A{public:
int i;
//methods
};
class B{public:
int i;
//methods
};
void f(MyType objs[]){
for( MyType ob : objs){
//do somthing to ob's members
}
}
int main(){
A a1,a2,a3;
B b1,b2;
//i don't now how but i want to create
//an array that contains a different
//instances of different
//typs A, B and C...
MyType objects[]=[a1,a2,a3,b1,b2];
//and lastly i want to pass the array to my function
f(objects);
return 0;}
我试图创建一个基类并制作 A 和 B 固有类。我该怎么做,或者那根本不可能?,如果是这样我怎么能达到类似的结果。
解决方案
这并非完全不可能。它非常复杂,因为它不适合静态类型语言的设计。
根据您能够遵守的其他限制,有许多不同的方法可以采用不同的复杂性。例如,您在示例中只有两种类型。一个可能的解决方案std::variant
:
std::variant<A, B> objs[] {a1,a2,a3,b1,b2};
for(std::variant<A, B>& ob : objs){
std::visit([](auto&& arg){
arg.i = 42;
}, ob);
}
另一种完全不同的方法是面向对象的层次结构,其中您有一组指向不同派生类实例的基类子对象的指针,这些子对象具有实现多态行为的虚函数。
推荐阅读
- r - 如何在 R Studio 中创建新列并添加特定于每一行的文本?
- c# - TCP 服务器和客户端同时进行
- ios - 续订 iOS 分发证书
- symfony - Symfony - XXX 不是构造函数
- c - 如何使用数组来拥有任意类型的元素?
- python - Ubuntu 上的 Mysql 和主机上的 Jupyter
- objective-c - 如何将主菜单添加到应用程序?
- python - 如何计算列表的每三个值的平均值
- javascript - Google Maps API 返回空的纬度和经度
- python-3.x - 使用Scrapy抓取多个页面时如何在POST请求上动态更改FormRequest中的页码