Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2011, 07:20   #1
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию Последовательность из объектов несвязанных типов

Стандартная библиотека предоставляет возможность объявлять списки (list), вектора (vector) и т.д. Но у них всех есть одна особенность - это последовательности элементов одного класса. То есть
Код:
list<int>
это список целых чисел. Но что, если мне нужно создать список из никаким образом не связанных типов, а на этапе выполнения определять (думаю, через switch), с объектом какого типа я работаю? Думал использовать указатели на void и reinterpret_cast, но как-то слишком низкоуровневый код получается, небезопасный.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 08:03   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

С STL, такая штука "не прокатит". Надо создавать свой класс работы с односвязными списками, а типы переопределять через перегрузку.
Например:
struct S_int
{
int a;
S_int *ptr;
};

X->Add(bool);
X->Add(int);
X->Add(float);
В список будут добавлены элементы с разными типами.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 20.07.2011 в 07:46.
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.07.2011, 08:08   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Несколько не улавливаю вашу мысль, если честно. Что за сущность X в вашем примере?
Цитата:
а типы переопределять через ререгрузку
Так не подойдет. Мне нужна возможность хранить объекты любых типов.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 08:40   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Тема более не актуальна. Я нашел более простое и качественное архитектурное решение, в котором такие списки не требуются.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 19:31   #5
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Стандартная библиотека предоставляет возможность объявлять списки (list), вектора (vector) и т.д. Но у них всех есть одна особенность - это последовательности элементов одного класса. То есть
Код:
list<int>
это список целых чисел. Но что, если мне нужно создать список из никаким образом не связанных типов, а на этапе выполнения определять (думаю, через switch), с объектом какого типа я работаю? Думал использовать указатели на void и reinterpret_cast, но как-то слишком низкоуровневый код получается, небезопасный.
Можно использовать иерархию классов и в контейнере ъранить указатель на базовый класс для любого производного от него класса.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 19.07.2011, 22:15   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Как вариант - union'ы
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 19.07.2011, 22:35   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Как вариант - union'ы
Не уловил мысль, как union поможет со списком объектов несвязанных типов.
EUGY вне форума Ответить с цитированием
Старый 19.07.2011, 23:52   #8
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну, как я понял, на момент компиляции множество возможных типов автору известно.
Код:
struct ListElement{
  union{
    int IntData;
    char *StringData;
    CoolClass *CoolClassData;
  };
  int Type; // или enum {INT,STRING,COOLCLASS} Type;
};
list<ListElement>
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 20.07.2011, 00:23   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну допустим есть у нас список из ListElement, хотя можно и просто список указателей.
Но суть вопроса, как при перечислении определить тип объекта.
EUGY вне форума Ответить с цитированием
Старый 20.07.2011, 00:39   #10
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Не знаю... может глупость скажу, а может помогу, по крайне мере в с# можно ипользовать вот такую штуковину:
Код:
Object[] myArray = new Object[Size];
и пихать в этот массив почти всё, что душе угодно.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
приведение типов??? nikozavr C# (си шарп) 1 14.05.2011 22:29
Преобразование типов jungle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2010 19:41
Приведение типов массива объектов Arnezami Общие вопросы .NET 3 17.12.2009 11:30
При написании кода не открывается список типов, объектов. garic Microsoft Office Excel 3 14.03.2009 18:56
не соответствие типов amandra SQL, базы данных 6 30.06.2008 18:04