C ++ создает вектор, в котором хранятся разные имена - PullRequest
3 голосов
/ 23 мая 2019

Я хочу создать вектор, в котором будут храниться имена типов данных (int, char, bool и т. Д.)

Я ищу что-то вроде:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc,char** argv)
{
  vector<typenames> v = {int,float,double,bool};
}

Ответы [ 2 ]

5 голосов
/ 23 мая 2019

Если у вас есть конечный набор типов, которые вы хотите сохранить, вы можете использовать <variant>, например,

#include <variant>

using VarType = std::variant<int, float, double, bool>;
std::vector<VarType> v;

v.push_back(42);

assert(std::holds_alternative<int>(v.front()));
assert(std::get<int>(v.front()) == 42);

v[0] = true;

assert(std::holds_alternative<bool>(v.front()));
assert(std::get<bool>(v.front()));

Обратите внимание, что если C ++ 17 недоступен, вы можете использовать Boost-вариант .

3 голосов
/ 23 мая 2019

Нет. Это невозможно. C ++ - это язык статической типизации, а не язык динамической типизации. Что вы можете сделать, так это иметь набор перечислений для типов и поместить их в vector.

enum Type
{
    IntType, FloatType, DoubleType, BoolType
};

vector<Type> v;

Или вы можете использовать std::variant (C ++ 17).

Ваш вопрос не ясен. Может быть, вам нужно std::pair или std::tuple, чтобы хранить разные элементы (с определенным количеством элементов).

...