Мой вопрос довольно короткий:
Мне нужен вектор, который содержит разные типы, например:
std::vector<int,double> vec;
vec.emplace_back((int) 1);
vec.emplace_back((double) 2.0);
Я пытался использовать boost: variant, но проблема в том, что каждый раз, когда вы хотите использовать значения, нужно посещать/извлекать числа из вектора.
Я определяю начальные значения для вектора, поэтому типы являются статическими и определяются во время компиляции. Более того, я хочу иметь возможность перебирать их (именно поэтому я использую вектор — это также может быть карта или любой другой контейнер).
Я хочу использовать векторные записи, такие как int или double, в программе без использования boost::get или чего-то в этом роде. Я думаю, что это должно быть возможно, потому что тип каждой записи полностью определяется во время компиляции, но я не знаю, как заставить его работать.
double d=vec[1]*3.0; //this should somehow work
int i=vec[0]*8; //this also without any get or anything
Я пытался использовать кортежи, но у меня нет большого опыта работы с ними, и мне кажется, что перебирать их довольно сложно.
for(auto &elem : vec) std::cout << elem << std:endl; //this or sth. similar should also work
Любая помощь приветствуется.
boost::variant
или его разновидности. - person AnT   schedule 03.07.2015dynamic_cast()
и т. д., если у классов нет ничего общего. Если вам требуется перегрузитьoperator<<
иoperator*
, необходимые операции будут каким-то образом работать. - person namezero   schedule 03.07.2015ints
иdoubles
всегда будут храниться вместе как пары? - person Galik   schedule 03.07.2015