首页 > 解决方案 > 将不同类类型的数组传递给函数并循环它们

问题描述

我是 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 固有类。我该怎么做,或者那根本不可能?,如果是这样我怎么能达到类似的结果。

标签: c++classoop

解决方案


这并非完全不可能。它非常复杂,因为它不适合静态类型语言的设计。

根据您能够遵守的其他限制,有许多不同的方法可以采用不同的复杂性。例如,您在示例中只有两种类型。一个可能的解决方案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);
}

另一种完全不同的方法是面向对象的层次结构,其中您有一组指向不同派生类实例的基类子对象的指针,这些子对象具有实现多态行为的虚函数。


推荐阅读