Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910

Запись значения в переменную неизвестного типа

22.12.2011, 03:05. Показов 3720. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток.
Столкнулся со следующей проблемой. Есть некая структура, которая содержит в себе даные типов ShortString, unsigned, DWORD. И в зависимости от типа, программа (а точнее макрос) должен записывать в нее разные значения. Пытался реализовать это подобным образом:
C++
1
2
3
4
5
6
#define Procedure(VAR) \\
AnsiString Value = ... ; \\
if (sizeof(VAR) < 255) \\
  VAR = Value.ToInt(); \\
else \\
  VAR = Value
Но по понятным причинам компилятор будет изрядно комментировать последнюю строчку. Да использовав подобные условия в макросе придется отключать несколько варнингов на "условие всегда истино", "нечитаемый код" и т.п. В связи с этим возникает вопрос: как граммотно провести данную реализацию? Из соображений только inline с параметром void *.

Добавлено через 40 минут
Временно "решил" проблему следующим образом:
C++
1
2
3
4
5
6
#define Procedure(VAR) \\
AnsiString Value = ... ; \\
if (sizeof(VAR) < 255) \\
  VAR = Value.ToInt(); \\
else \\
  (ShortString)VAR = Value
Но интересует третье мнение по этому вопросу.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2011, 03:05
Ответы с готовыми решениями:

C++ Builder 6 запись значения из Edit1->text в переменную типа wchar_t
Вот кусок кода, где объявлен класс, и экземпляром класса является массив. У класса есть переменная, имеющая тип wchar_t, надо записать в...

Перенос значения переменной типа Real в переменную типа Integer
Как сделать так чтобы переменная типа integer приняло число которое было в переменной типа real???

Поиск в документе word через vba значения после и запись в значения в переменную
Добрый день. Подскажите пожалуйста, как мне посредством vba сделать поиск в word по значению после указанного &quot;^LT-&quot; в коде?...

8
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.12.2011, 03:19
VARIANT ?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
22.12.2011, 03:38  [ТС]
Думал об этом, но не вижу смысл использовать переменную общего типа. С такой же уверенностью можно хранить всю информацию в текстовом виде (что к слову и делал разработчик до меня). Сейчас "копаю" в сторону #if #else #endif.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.12.2011, 03:41
где то здесь намедни обсуждалась переменная типа void .

Тип void
Переобразовать void в int
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
22.12.2011, 04:30  [ТС]
Я писал об этом в первом сообщении. Задача на самом деле не сложная на вид. Чтобы не допустить оплошность в копипастах из-за человеческого фактора - переложить эту ношу на макросы компилятора. Банальная возможность использования препроцессорных директив внутри макроса на порядок бы облегчила работу. Но раз подобной возможности нет, видимо придется использовать несколько макросов вместо одного.
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
22.12.2011, 04:43
Создать метод с передачей по ссылке. И дополнять его перегрузками
C++
1
2
3
4
5
6
7
8
9
AnsiString Value = ... ;  
void Procedure(int & x)
{
      x = Value.ToInt();
}
void Procedure(ShortString & x)
{
      ......
}
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
22.12.2011, 05:35
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
С такой же уверенностью можно хранить всю информацию в текстовом виде
а BYTE (unsigned char) не подойдет?
выделяешь массив байтов записываешь в него
а потом приводишь к той структуре которая нужна
майкрософт для работы со структурами разного размера использует поле(чаще всего первое) size (размер структуры в байтах)
посмотри нет ли у тебя такого поля
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
22.12.2011, 07:17  [ТС]
Цитата Сообщение от Питекантроп Посмотреть сообщение
Создать метод с передачей по ссылке. И дополнять его перегрузками
Создавать отдельные функции смысла в данном случае нет, тут бы и вопросов не возникло.
Цитата Сообщение от ValeryS Посмотреть сообщение
посмотри нет ли у тебя такого поля
Поясню. Ранее существовала только один тип структуры вида [свойство = значение], состоящая только из строк размером по 256 байт каждая, количество строк было фиксированным, взятым из расчета "а наверно хватит". И такая структура имела размер больше, чем модуль для обработки. Но это цветочки, данные разбросаны как после большого взрыва, а формат данных без пару десятков исключений определить толком нельзя, ибо тот же ноль может быть равен "none", "null", "empty" и т.п. Иными словами по данным нельзя точно сказать, какой тип они в себе представляют. Поэтому для их выявления используются другие алгоритмы(sizeof(...) для примера был), но выбрать их необходимо на этапе компиляции. Поэтому я писал про директивы #if, #else, #endif. При возможности их нахождения внутри макроса, не пришлось бы писать еще несколько и поправлять случайные "опечатки". Можно занести их в процедуру, объявленную как inline, но компилятор его просто проинорирует, т.к. там не 2 строчки.
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
22.12.2011, 15:58
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Поэтому для их выявления используются другие алгоритмы(sizeof(...) для примера был), но выбрать их необходимо на этапе компиляции. Поэтому я писал про директивы #if, #else, #endif. При возможности их нахождения внутри макроса, не пришлось бы писать еще несколько и поправлять случайные "опечатки".
а чем методы с одинаковым именем с передачей и возвратом по ссылке не устраивают? Компилятор произведет выбор нужного метода на этапе компиляции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2011, 15:58
Помогаю со студенческими работами здесь

Запись текста из файла в переменную типа string
Нужно достать из текстового файла типа .txt текст и записать его в переменную. Соблюдение всех знаков препинания и разделителей ( особенно...

Запись в переменную типа int результата запроса select
Подскажите пожалуйста: у меня есть таблица в БД Oracle 11g с атрибутом COUNT типа NUMBER(2,0) и с первичным ключом ISBN типа VARCHAR2(30). ...

Запись в память процесса целого значения и значения типа float
Есть функции чтения/записи в память процесса: &lt;DllImport(&quot;kernel32.dll&quot;, SetLastError:=True)&gt; _ Private Shared Function...

Вставить random значения в переменную типа string
Есть строковая переменная, нужно заменить значения, соответствующие условию на рандомные. Сделал так: ...

Запись слова в переменную типа Стринг до тех пор пока не пробел
Добрый день, как можно записать в переменную типа Стринг слово введенное пользователем, пока не ввел пробел, можно ли это как-нибудь...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru