|
C++ и массивы констант., А в чистом C работало ... |
|
|
|
Dec 9 2009, 07:49
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Есть следующий код: Код typedef union { uint32_t p; float f; } tUnion; typedef struct { uint8_t type; uint8_t info[4]; tUnion u; } tItem; const tItem i[] = { {2, {1,2,4,2}, .u.f=1.5}, {1, {2,2,4,2}, .u.p=10}, {2, {3,2,4,2}, .u.f=2.3} }; В чистом C замечательно компилируется и работает. А вот как написать подобное в C++?
|
|
|
|
|
 |
Ответов
|
Dec 9 2009, 12:50
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Код union tUnion { int p; float f; tUnion(double t): f(t) {} tUnion(int t): p(t) {} };
struct tItem { const uint8_t type; const float info; tUnion u; tItem(const int t, const double in, int p): type(t), info(in), u(p) {}; tItem(const int t, const double in, double p): type(t), info(in), u(p) {}; };
const tItem Item[]= { {tItem(1, 2.1, 1)}, {tItem(23, 1.2, 3.2)} }; В реальном проекте в tUnion десяток разных типов ...
Сообщение отредактировал Terminator - Dec 9 2009, 12:52
|
|
|
|
|
Dec 9 2009, 12:55
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Terminator @ Dec 9 2009, 16:50)  [code][/code] Ну ничего монстрообразного не вижу  А массивы можно инициализировать так же как в С Цитата(Terminator @ Dec 9 2009, 16:50)  В реальном проекте в tUnion десяток разных типов ... Тогда будте аккуратны с конструкторами (чтобы избежать неявного приведения типов) Может имеет смысл объявить их explicit
|
|
|
|
|
Dec 9 2009, 13:14
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(Dima_G @ Dec 9 2009, 18:55)  Ну ничего монстрообразного не вижу А массивы можно инициализировать так же как в С Действительно, если немного упростить то и массивы нормально укладываются. Про explicit можно подробней, что это даст?
|
|
|
|
|
Dec 9 2009, 16:14
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Terminator @ Dec 9 2009, 17:14)  Про explicit можно подробней, что это даст? Погорячился) Смысла тут от этого не будет
|
|
|
|
Сообщений в этой теме
Terminator C++ и массивы констант. Dec 9 2009, 07:49 Methane Цитата(Terminator @ Dec 9 2009, 09:49) Ес... Dec 9 2009, 08:01 Terminator Цитата(Methane @ Dec 9 2009, 14:01) В плю... Dec 9 2009, 08:07  Methane Цитата(Terminator @ Dec 9 2009, 10:07) Ну... Dec 9 2009, 08:13   VladimirYU Кодstruct TItem
{
..........
};
const TItem Item
... Dec 9 2009, 08:29    Terminator Цитата(VladimirYU @ Dec 9 2009, 14:29) Ко... Dec 9 2009, 08:52     Methane Цитата(Terminator @ Dec 9 2009, 10:50) А ... Dec 9 2009, 08:53  Dima_G Цитата(Terminator @ Dec 9 2009, 12:07) Ну... Dec 9 2009, 08:54   jorikdima Цитата(Dima_G @ Dec 9 2009, 11:54) Скольк... Dec 9 2009, 09:00    Dima_G Цитата(jorikdima @ Dec 9 2009, 13:00) пре... Dec 9 2009, 09:15     Methane Цитата(Dima_G @ Dec 9 2009, 11:15) sss(BY... Dec 9 2009, 09:50      Dima_G Цитата(Methane @ Dec 9 2009, 12:50) Никог... Dec 9 2009, 10:04       Methane Цитата(Dima_G @ Dec 9 2009, 12:04) Вы про... Dec 9 2009, 11:22      demiurg_spb Цитата(Methane @ Dec 9 2009, 12:50) Никог... Dec 9 2009, 16:09     Terminator Цитата(Dima_G @ Dec 9 2009, 15:15) Те сто... Dec 9 2009, 12:28      Dima_G Цитата(Terminator @ Dec 9 2009, 16:28) По... Dec 9 2009, 12:41 Terminator без .u.f оно приводит к типу первого элемента unio... Dec 9 2009, 08:18 Methane Цитата(Terminator @ Dec 9 2009, 10:18) бе... Dec 9 2009, 08:37 jorikdima Создайте отдельный модуль и компилируйте его и тол... Dec 9 2009, 08:49 LessNik Вообще-то и первоначальный код прекрасно собрался.... Dec 9 2009, 09:51 alekseykoj Вот так попробуй.
Кодtypedef unsigned char uint8_t... Dec 17 2009, 07:00 HARMHARM Цитата(alekseykoj @ Dec 17 2009, 09:00) К... Dec 17 2009, 07:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|