Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / А есть какой-нибудь общий тип данных для структур ? / 10 сообщений из 10, страница 1 из 1
19.06.2015, 10:02
    #38987498
ccc1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
Есть, допустим, структура и массив этих структур:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
struct Struct1{
  int i;
  double d;
};
...
concurrent_queue <Struct1*> q;
...
Struct1 s;
s->i = 5;
s->d = 3.56;
q.push(s);



Теперь хочу работать с другой структурой:
Код: plaintext
1.
2.
3.
struct Struct2{
  TCHAR tch[30];
};



Можно ли массиву concurrent_queue как-то задать тип структуры, которая будет в нём храниться ?
Что-то вроде такого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
...
тип_структуры st = Struct1;
concurrent_queue <st*> q;
...
if (st == Struct1)
{
Struct1 s;
s->i = 5;
s->d = 3.56;
q.push(s);
}
else
{
Struct2 s;
s->tch = "asd";
q.push(s);
}
...
Рейтинг: 0 / 0
19.06.2015, 10:12
    #38987508
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
Сведи все к одной структуре и ее используй
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
struct StructX {
  char type;
  union {
    Struct1 s1;
    Struct2 s2;
  }
}
...
Рейтинг: 0 / 0
19.06.2015, 10:16
    #38987511
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
Так не заработает:
ccc1
Код: plaintext
1.
2.
3.
4.
5.
6.
concurrent_queue <Struct1*> q;
...
Struct1 s;
s->i = 5;
s->d = 3.56;
q.push(s);
...
Рейтинг: 0 / 0
19.06.2015, 10:25
    #38987517
ccc1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
Dima TСведи все к одной структуре и ее используй
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
struct StructX {
  char type;
  union {
    Struct1 s1;
    Struct2 s2;
  }
}



Не плохой вариант, но малопроизводительный, наверное. Структур будет ориентировочно 4, в каждой из которых будет по 10-20 полей. В массив-очередь будет поступать сотня экземпляров структуры в секунду. Все их надо очень быстро обрабатывать и передавать дальше. При каждой передаче тащить ещё и остальные структуры, пусть даже пустые, но память под них всё равно будет выделяться/уничтожаться также сотню раз в секунду.

Читаю пока про шаблоны классов. Смущает вот только потом сложность сопровождения и отладки.
...
Рейтинг: 0 / 0
19.06.2015, 10:28
    #38987523
ccc1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
Dima TТак не заработает:
ccc1
Код: plaintext
1.
2.
3.
4.
5.
6.
concurrent_queue <Struct1*> q;
...
Struct1 s;
s->i = 5;
s->d = 3.56;
q.push(s);



работает. Наоборот может не заработает. Почему именно так сделал - не помню уже. Привёл аналог из работающего кода. Просто понадобилось использовать другие структуры. Очередь является членом класса. Не хочется создавать копии классов для других структур.
...
Рейтинг: 0 / 0
19.06.2015, 10:34
    #38987532
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
ccc1При каждой передаче тащить ещё и остальные структуры, пусть даже пустые, но память под них всё равно будет выделяться/уничтожаться
Почитай что значит union .
...
Рейтинг: 0 / 0
19.06.2015, 10:50
    #38987549
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
>> А есть какой-нибудь общий тип данных для структур?
что мешает его создать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
struct IStruct {};
struct Struct1 : public IStruct
{
    ...
};
struct Struct2 : public IStruct
{
    ...
};

concurrent_queue < IStruct * > q;

Struct1 *s1 = new Struct1;
Struct2 *s2 = new Struct2;

q.push( s1 );
q.push( s2 );
...
Рейтинг: 0 / 0
19.06.2015, 12:16
    #38987740
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
ccc1сотня экземпляров структуры в секунду
Такой мелкий поток данных не стоит заморочек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.06.2015, 12:59
    #38987842
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
ccc1,

Если тебе нужен общий предок всех твоих структур, то его в С++ (и С) нет.
Но ты можешь его сделать легко сам, руками.

Если тебе нужно во время работы программы ветвиться по типу структуры, то в С++ (но не в С) есть RTTI, оно
позволяет узнать динамический тип объекта и делать ветвление по нему.
Но вообще-то для последнего и придумали полиморфизм, в смысле -- виртуальные фукнции. Т.е. в ООП такие IF-ы по типам
данных считаются антипаттерном, т.е. дурным вкусом, хотя иногда применение таких приёмом оправдано.
...
Рейтинг: 0 / 0
19.06.2015, 13:02
    #38987850
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть какой-нибудь общий тип данных для структур ?
авторНе плохой вариант, но малопроизводительный, наверное.

Необоснованное утверждение.


автор Структур будет ориентировочно 4, в каждой из которых будет по 10-20 полей. В массив-очередь будет поступать сотня экземпляров структуры в секунду.

Это немного. Вообще, мне кажется, что тебе не стоит пока думать о производительности, а сосредоточиться на дизайне программы.


авторВсе их надо очень быстро обрабатывать и передавать дальше. При каждой передаче тащить ещё и остальные структуры, пусть даже пустые, но память под них всё равно будет выделяться/уничтожаться также сотню раз в секунду.


Ну, ты можешь, например, не выделять память динамически, тебя никто не заставляет.
Но сотня в секунду -- это немного.

авторЧитаю пока про шаблоны классов. Смущает вот только потом сложность сопровождения и отладки.


Шаблоны тут ни к селу, ни к городу, не пришей кобыле хвост.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / А есть какой-нибудь общий тип данных для структур ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]