Я кратко рассмотрел различные c++ сайты и текстовые книги. Но ни у кого из них не было ничего, связанного с тем, что я искал.
То, что я хочу, это список в c++, который может содержать внутри него переменные int, string и int. Но прежде чем я часами играю с некоторым кодом, мне было интересно, знает ли кто-нибудь, существует ли такая вещь на самом деле? Я не прошу указать код для меня, если это возможно, я попробую его, а затем спрошу о любых проблемах, которые у меня есть.
благодаря
Ваш лучший вариант: boost. Помните - я не сказал вам, что это будет легко.
Использование будет простым:
typedef boost::variant<...my necessary types...> MyVariant;
std::list<MyVariant> myList;
Если вы имели в виду объект, который может содержать int, string и массивы в виде отдельных объектов, а не как один (например, объединение), я думаю, вы должны взглянуть на С++ 11 кортежей и использовать их в списке.
std::tuple<int, std::string>
например, содержит int и строку, а не int или строку.
Возможно, небезопасно размещать различные типы объектов/данных в одном списке.
Но если это требование, то почему бы не получить новый класс из std :: list с комбинацией отслеживания типов, которые вставляются в список, используя aproach, упомянутый в приведенном выше ответе.
virtual
методов, 3. Унаследование от класса без virtual
деструктора и с открытым доступом. Копирование / перемещение конструкторов - это рецепт катастрофы (усечения).
Вы также можете создать структуру, используя указатель union или void.
enum varType
{
vt_int,
vt_float,
vt_string
}
class myVariant
{
private:
void* mVariable;
varType mType;
};
или,
class myVariant2
{
private:
union
{
float fValue;
int iValue;
std::string* sValue;
};
varType mType;
}
Это нехорошо и требует кастинга, но если вам не нравится использовать другие библиотеки для такой небольшой задачи, это может помочь.
Edit1: вам понадобятся функции getStringValue, getFloatValue getIntValue.
Edit2: Вы можете безопасно использовать эти классы в std :: list.
Edit3: вам нужно вызвать деструктор std :: string (если переменная является строкой) самостоятельно.