C 中不同类型的数组

Array of different types in c++

本文关键字:数组 同类型      更新时间:2023-10-16

是否可以制作不同变量类型的数组?例如,

int p1[]={1, 2, 3};
float p2[]={1.1, 2.2, 3.3};
double p3[]={...};
...
...
arr[0].ptr = p1;
arr[1].ptr = p2;
...

首先,我尝试用枚举,void* ptr和std ::与模板相同。我做到了,但看起来真的很脏。这样。

enum dataType{...}
struct arr{
    void *p
    dataType datatype
}
template<typename T>
void insert(T x){
    if(std::is_same<T, int*>) /* ... */
    else if(std::is_same<T, float*>) /* ... */
    ...
}
void foo(int a, int b){
    std::cout<<(TYPE_CHANGE_SOMEHOW)arr[a].ptr[b]<<std::endl;
}
// and much more

所以我正在寻找其他方式。

  • std ::元组需要用特定类型声明,所以我不能使用它们。
  • 仅使用void*无法与索引访问一起使用

您可能需要考虑std ::变体的std::arraystd::vector

std::vector<std::variant<int, float>> vvec;
vvec.push_back(42);
vvec.push_back(3.1415);
try
{
   std::get<float>(vvec[0]); // vvec[0] contains int, not float: will throw
}
catch (const std::bad_variant_access&)
{
    // Handle exception
}