Ищете эквивалентный контейнерный класс, соответствующий классу коллекций Arrayalist C#. Есть ли что-нибудь, что близко к контейнеру, который может обеспечить индексирование на основе индекса, а также хранить несколько типов данных.C++ Эквивалент C# Arraylist для хранения нескольких типов данных
То, что я пытаюсь сделать, это реализовать Model-View-Controler. Я пытаюсь создать контроллер, который может внутренне управлять различными типами формы типов данных (например: Box2D, Circle2D, Circle3D и т.д.)
//Controller code
class Controller
{
//internally track all shapes...
void CreateShape(const Box2d &box);
void CreateShape(const Box3d &box);
void CreateShape(const Circle2d &circle);
//More Add/Edit/Remove Shape methods...
void Reset(); //clear the container of shapes...
};
Я пытаюсь создать вектор или другой тип контейнера, может содержать несколько типов данных. Например:
//Is this line of code possible??
vector <int, string> vec;
int i=0;
string str = "test";
//add different data-type objs into my vector mutable array
vec.push_back(i);
vec.push_back(str);
Пожалуйста, посоветуйте, если есть другие контейнерные классы в C++, которые могут помочь мне достичь этой функциональности или есть способ использовать векторный класс для хранения нескольких типов данных.
¤ Вопрос звучит как красная селедка: DESIGN ERROR. Но, учитывая, что вы действительно этого хотите, самым простым является только тип структуры, содержащий строку int * и *. И, возможно, член, который говорит, что. Паскаль-подобное решение представляет собой «вариантную запись», что означает объединение с членом, обозначающим, какой член профсоюза в настоящее время действителен. Это работает в C++ 11, но не для типов с конструкторами в C++ 03. Вы можете использовать boost :: variant или другой класс Boost, я забыл имя. Но, учитывая, что это, скорее всего, ошибка дизайна, я советую держать его простым, быть готовым удалить его. Cheers & hth., –
@Serge: пожалуйста, также объясните OP как способ доступа к этим элементам. Cheers, –
Следуя за комментарием Альфа. Если используется Visual Studio, ваша «вариантная запись» буквально VARIANT :-) –