Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
#1

Хранение разных типов - C++

13.03.2014, 12:47. Просмотров 810. Ответов 22
Метки нет (Все метки)

Приветствую всех. Возник вот такой вопрос. У меня есть, например, 3 разных структуры, каждая из которых имеет разные поля:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct one
{
int x;
int y;
string value;
};
 
struct two
{
string k;
double a;
double b;
double c;
};
 
struct three
{
char t;
double z;
string name;
}
Можно ли создать динамический массив, где можно будет хранить сразу все эти структуры?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 12:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Хранение разных типов (C++):

Хранение и вызов различных типов функций в одной переменной - C++
Есть класс, который должен хранить функции и давать возможность их вызывать. Он выглядит примерно так: class Functions { public:...

Хранение в контейнере обьектов разных классов - C++
Здраствуйте. Есть небольшая иерархия классов, в вершине которой стоит абстрактный класс vehicle, а от него наследуеться пару классов....

Сложение разных типов - C++
У меня из файла в переменную int считывется число.. Мне нужно занести в переменную string это число + строка. Например int...

Указатели разных типов - C++
Добрый день уважаемые форумчане !!! Хочу уточнить для себя следующую деталь. Есть базовый класс Fada и производные от него Tasa ...

Матрица из разных типов - C++
хочу создать клас Matrix елементы обьектов которого могли бы быть разных типов. была идея создать клас Cell и определить его как...

Открытие разных типов файлов - C++
Добрый день. Я тут задался вопросом "а можно ли открыть изображение через fstream в бинарном режиме?", через пару минут понял что нет. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
13.03.2014, 14:36  [ТС] #16
John Prick, целые числа и строки. А назначение их может быть каким угодно, зависит от конкретной команды
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 5
Завершенные тесты: 1
13.03.2014, 14:43 #17
TenGen, а почему тогда вы не используете подход Win API?
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,043
Завершенные тесты: 3
13.03.2014, 14:49 #18
Тогда можно поступить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class AbstractParameter
{
public:
    virtual ~AbstractParameter(void) {}
protected:
    AbstractParameter(void) {}
};
 
struct StringParameter: public AbstractParameter
{
    string value;
};
 
struct IntParameter: public AbstractParameter
{
    int value;
};
Структуру команды я уже указывал:
C++
1
2
3
4
5
struct Command
{
    int type;
    SomeContainer<AbstractParameter*> params;
};
Вот объекты типа Command вам и стоит хранить в массиве, а параметры команды - в контейнере params.

Однако, когда вы будете обращаться к конкретным параметрам, вам всё равно придётся как-то выяснять их тип. Толи с помощью dynamic_cast, толи ещё каким-нибудь способом (например, паттерн visitor есть на этот случай).

Возможно, вам стоит подумать, нельзя ли как-то сделать параметры команды одного типа.
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
13.03.2014, 14:54  [ТС] #19
Ilot, я о таком не слышал) можно подробнее?

John Prick, думаю вот...
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 5
Завершенные тесты: 1
13.03.2014, 14:59 #20
У любого приложения на Windows есть очередь т.н. сообщей. Т.е. любое событие происходящее с приложением описывается как структура типа MSG. Одно поле идентифицируется как код команды, смысл остальных полей зависит от типа сообщения. Одним словом гуглите оконная процедура там все будет понятно.
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
13.03.2014, 15:02  [ТС] #21
Ilot, ну я так примерно и делаю, только кол-во параметров у меня может быть совершенно разным
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 5
Завершенные тесты: 1
13.03.2014, 15:10 #22
Количество параметров два: тип команды и строка с конкретными значениями. Т.е. так же как и передача параметров командной строки.
TenGen
Будущее рядом
97 / 95 / 20
Регистрация: 06.03.2014
Сообщений: 342
13.03.2014, 15:14  [ТС] #23
Ilot, понятно, благодарю. Я просто задумался, можно ли задачу, описанную в заголовке, решить как нибудь красиво
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 15:14
Привет! Вот еще темы с ответами:

Сравнение переменных разных типов - C++
Здравствуйте. Столкнулся с проблемой не совпадения типов данных. Есть переменная string str, которая, к примеру, имеет значение &quot;1245&quot;....

Использование разных типов указателей - C++
Здравствуйте! Программа должна засерать переменную n, а вместо этого она забивает мусором переменную upper. Можете подсказать в чём дело? ...

Разделение строки на переменные разных типов - C++
Помогите с разделением строки Есть String dat dat = &quot;40.10 50.10 60.10 70.10 11:15:23 4-03-2012&quot; необходимо разделить ее на 4...

Функция приема разных типов в классе - C++
Сразу скажу что надо. Есть функция pow(), так вот она принимает разные типы данных. У меня класс хочу сделать тоже самое. Подскажите как, я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.03.2014, 15:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru