如何在数组中存储不同类型的元素?
以下示例可能会导致问题,因为" 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;
}
答案 0 :(得分:0)
我不明白你的代码 - 你只是想要一个Car
的数组吗?
如何在数组中存储不同类型的元素?
使用std::variant
或boost::variant
。例如,假设您需要int
或float
的数组:
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