如何制作一组结构?

时间:2014-08-21 19:12:40

标签: c++ arrays struct

我想知道我是否可以创建一个结构数组,然后在foreach循环中使用它。

struct A { int a; }; 
struct B { int b; }; 
struct C { float c; };

然后:

int main()
{ 
     A a; B b; C c; 

     //Here I want to make an array of a, b and c,
     //then use it in for loop with the ints and floats. 

}`

5 个答案:

答案 0 :(得分:2)

您无法安全地在C ++中创建一组不相关的类型。

如果您需要将对象放在容器中,那么它们可能有些相关:您应该考虑向ABC添加公共基类,然后操纵(智能)基类指针的数组(或vector ...)。

但是,考虑一下定义封装结构的类型的可能替代方案,而不是声明这个“数组”:

struct T {
   A obj1;
   B obj2;
   C obj3;
};

注意:

  • 如果确实需要类型擦除,那么boost::anyboost::variant非常便于封装对象或任何类型。

答案 1 :(得分:1)

当然可以,但是如果不使用外部库,就不能创建一组不相关的类型/结构:

#include <iostream>

struct Person
{
    std::string name;
    int age;
    std::string job;
};

int main()
{
    Person people[10];

    //I am a normal one.
    for(int i=0; i<10; ++i)
    {
        people[i].name = "usar";
        people[i].age = i;
        people[i].job = "Astronaut";
    }

    //foreach loop
    for(Person p: people)
    {
        std::cout << "Name: "<< p.name << "\n";
        std::cout << "Age: "<< p.age << "\n";
        std::cout << "Job: "<< p.job << "\n";
    }

    return 0;
}

答案 2 :(得分:0)

是的,只需像其他类型一样创建它。假设我们有Car的结构

struct Car
    {
           int engine;
           string brandName;
    };

您可以像

一样创建它
Car list[2]={{3000, "BMW"},{2200, "Mercedes-Benz"}};

或只是

Car list[2];

答案 3 :(得分:0)

如果你想拥有不同类型的“数组”,那么在技术上它在C ++中是可行的,虽然不是很简单。至少不适合新手C ++程序员。首先,您需要使用非平凡的数据类型,如boost::variantstd::tuple,第二 - 访问该数据将需要模板元编程,这对初学者来说也不容易。但很可能你的问题有更简单的解决方案,可以更容易地解决,你只是在寻找错误的方向。

答案 4 :(得分:0)

struct Base
{

    virtual ~Base(){}

    virtual int GetInt()
    {
        throw "Not implemented";
        return 0;
    }
    virtual float GetFloat()
    {
        throw "Not implemented";
        return 0.0f;
    };
};

struct A : public Base
{
    int a;
    virtual int GetInt()
    {
        return a;
    }
};

struct B : public Base
{
    int b;
    virtual int GetInt()
    {
        return b;
    }
};

struct C : public Base
{
    float c;
    virtual float GetFloat()
    {
        return c;
    }
};

int main()
{ 
    A a; B b; C c; 

    Base* array[ 3 ] = { &a, &b, &c };
}