将具有不同类型的元素存储到数组中

时间:2017-09-04 13:08:32

标签: c++ arrays types

如何在数组中存储不同类型的元素?
以下示例可能会导致问题,因为" wheel"可以在8位数组中使用32位,因此它填充前4个字段(如果我理解正确的话)。我可以使用移位运算符<<要克服这个问题,还是有更好的方法来做到这一点?

class Car
{
    public:
        Car();
        ~Car();

    private:
        int32 wheels;             // 32 bit Integer
        bool canDrive;            // 1 bit Boolean
        int16 doors;              // 16 bit Integer
}

Car()
{
    wheels = 4;
    canDrive = true;
    doors = 2;
}

int main()
{
    Car testCar;
    int08 tmpArray[ARRAY_SIZE] = { 0 };   //8-bit Integer array

    tmpArray[0] = testCar.wheels;         //Store 32-bit Integer into 8-bit Integer
    tmpArray[1] = testCar.canDrive;       //Store 1-bit Boolean into 8-bit Integer
    tmpArray[2] = testCar.doors;          //Store 16-bit Integer into 8-bit Integer

    /* Do something with tmpArray */       

    return 0;
}

3 个答案:

答案 0 :(得分:0)

我不明白你的代码 - 你只是想要一个Car的数组吗?

  

如何在数组中存储不同类型的元素?

使用std::variantboost::variant。例如,假设您需要intfloat的数组:

using i_or_f = std::variant<int, float>;
std::array<i_or_f, 5> arr;
arr[0] = i_or_f{5};
arr[1] = i_or_f{0.4f};

答案 1 :(得分:0)

1。)您的testCar构造不正确。没有数据分配给wheelsm,canDrive,.......因此,使用此未定义数据设置其他值将导致未定义的行为。

2。)您的班车成员价值是私人的(这是一件好事,因为它确保您的数据封装)。您将无法按照自己的意愿访问它们。

3.。)您可以使用不同类型进行类型转换。但你为什么要这样做呢。你正在失去type safety

4。)您能解释一下,将您的类成员存储在数组中的目的是什么。如果您不想担心实际类型,请考虑使用auto

This也值得一读。

答案 2 :(得分:0)

  

如何在数组中存储不同类型的元素?

使用多态。

创建一个基类指针的std :: vector。

std::vector<Car_t*> carVec;

创建派生实例的指针并在vector中安装。每个派生实例都是不同的类型。

carVec.push_back(new Derived_A_FromCar);
carVec.push_back(new Derived_B_FromCar);
carVec.push_back(new Ferrai_t);
carVec.push_back(new Fairlane_t);
... etc