Массив разных типов в с ++ - PullRequest
0 голосов
/ 04 мая 2019

Можно ли создать массив переменных типов?Например,

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

arr[0].ptr = p1;
arr[1].ptr = p2;
...

Сначала я попытался решить эту проблему с помощью enum, void * ptr и std :: same с шаблонами.Я сделал это, но выглядит очень грязно.Вот так.

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 :: tuple должен быть объявлен с определенными типами, поэтому я не могу их использовать.
  • только с использованием void * не может работать с доступом к индексу

1 Ответ

1 голос
/ 04 мая 2019

Возможно, вы захотите рассмотреть std::array или std::vector из std :: variable :

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...