Например TDA7294

Форум РадиоКот • Просмотр темы - C++ сравнение данных с заранее неизвестными типами
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 23:26:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 51 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 13:22:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
RealHann писал(а):
если у меня 7 возможных типов, то 49 if-ов выглядят тупо. c A>B
практически всегда С++ сам сделает все необходимое при обычном сравнении одного типа с другим. я понять не могу: зачем может понадобиться делать это "врукопашную"?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 13:47:02 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если речь идёт о пользовательских типах, то компилятор сам не сделает ничего необходимого, ибо он не будет иметь понятия, что конкретно делать при сравнении.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 14:16:16 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Если речь идёт о пользовательских типах
ну кагбы для пользовательских типов в С++ можно переопределить операторы сравения.. и это как-то логичнее выглядит.
но вся беда в том, что у топикстартера стандартные типы
Код:
enum _cmp_type_e {
  _cmp_char =   'C',
  _cmp_ushort = 'U',
  _cmp_short =  'S',
  _cmp_uint =   'T',
  _cmp_int =    'I',
  _cmp_float =  'F'
};

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 14:19:00 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
ели бы автору нужно было сравнивать одинаковые заранее неизвестные типы, я бы посоветовал использовать union, и то это годится только для равно/не равно, если смотреть широко. Ну а если решать то что хочет конкретно автор - советую читать паттерны, в частности паттерн фабрика.
Я так делал у себя для определения некоего универсального поля. Потом наследовал через ряд различных классов, в каждом случае переопределял метод.


Последний раз редактировалось Ярослав555 Вт фев 20, 2018 14:21:06, всего редактировалось 1 раз.

Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 14:19:32 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
вся беда в том, что у топикстартера стандартные типы


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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 14:57:02 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
это один из виртуальных объектов общего конструктора. выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >

А пользователь с поздним связыванием к объекту приходит или в compile time?

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 19:56:55 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
уже в runtime будет определяться что и с чем сравнивать. для ясности дам такой пример. есть, к примеру, датчик освещенности. пользователь хочет автоматически управлять освещением. он в неком конфигураторе к объекту "датчик освещенности" подключает объект "сравнение", а к нему объект "реле". на один "вход" объекта "сравнение" теперь подается информация с датчика, а на второй пользователь хочет зацепить свой источник. только одному ему известно какой. этой может быть вход АЦП (целое), а может результат какого-то вычисления (дробное). объекту "сравнение" будут указаны типы аргументов из перечня. его задача правильно сравнить данные по указанному типу. ну а сами данные всегда лежат в одном и том же месте памяти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 22:36:11 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
В любом случае, без явных приведений не обойтись. А это if-ы, либо switch-case.
Ну и так как сравнивать нужно по-любому однотипные данные, значит приводим их к одному типу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 06:50:07 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Ну и так как сравнивать нужно по-любому однотипные данные, значит приводим их к одному типу.
вот-вот
Код:
typedef enum _cmp_type_e {
  _cmp_char =   'C',
  _cmp_ushort = 'U',
  _cmp_short =  'S',
  _cmp_uint =   'T',
  _cmp_int =    'I',
  _cmp_float =  'F'
} cmp_t;

typedef struct{
   cmp_t type;
   uint8_t data[4];
} data_t;

float normalize(data_t *data){
   switch(data->type){
      case _cmp_char: return *(char*)data->data;
      case _cmp_ushort: return *(unsigned short *)data->data;
      ...
   }
}

int compare_data(data_t *data1, data_t *data2){
   if(normalize(data1) > normalize(data2))
      return 1;
   else if(normalize(data1) < normalize(data2))
      return -1;
   else return 0;
}

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 09:17:59 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
тема называется "C++ сравнение данных с заранее неизвестными типами", а не С. А Вы лезете со своими ифами...
RealHann читаем о виртуальных классах, методах, читаем паттерны и тогда прийдет понимание как это все элегантно построить через указатели на материнский класс и динамическое выделение памяти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 09:22:10 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ярослав555 писал(а):
как это все элегантно построить
давайте вместо кучи нравоучений вы тут продемонстрируете, как это будет элегантно, конкретным кодом? а то на словах все Львы Толстые...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 10:15:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
давайте вместо кучи нравоучений вы тут продемонстрируете, как это будет элегантно, конкретным кодом? а то на словах все Львы Толстые...

Не буду я за автора что-то решать - у меня была своя похожая задача где требовалось унифицировать поля которые я выводил на ЖК.
Если ему хочется плюсов, то я бы это делал так.
Я бы определил три вида абстрактных классов - входной, передающий/преобразующий, выходной. На основе материнского класса определяем всех возможных наследников.
Для входных - разные каналы ввода (цыфрове, аналоговые, булевые...). Для выходных и передающих аналогично.
Ну и вот имеем передающий класс, внутри содержащий указатели на объекты ввода, виртуальный метод преобразования, и указатель на выходной класс. Метод преобразования, по указателю смотрит что там за идентификаторы и вызывает соответствующий метод/преобразования. Ну да, без ифов не обойтись :))) .
Вообще топикстартер изобретает велосипед - среду визуального программирования, причем хочет упростить задачу - изобретаем устройства для умного дома? Чтобы юзер мог сам конфигурировать систему? Я с подобным работал когда-то (Альфа от Микрола) - насколько я помню, если выход дает флоат, то его невозможно было подключить к интовому входу. Надо было ставить блок приведения.
Есть у ОВЕНа программируемые реле и к ним среда OWENLogic. По моему там тоже надо приводить типы, иначе не "скомпилится".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 10:53:16 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ярослав555 писал(а):
Ну да, без ифов не обойтись
вот с этого надо было и начинать, а не с "лезете со своими ифами...". это во-первых.
а во-вторых, даже описание того, что вы рекомендуете, заняло больше места, чем мой вариант (отлично работающий на С++), а реально это было бы килобайта 3 кода. очень элегантно, слов нет.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 11:17:14 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
вот с этого надо было и начинать, а не с "лезете со своими ифами...". это во-первых.
а во-вторых, даже описание того, что вы рекомендуете, заняло больше места, чем мой вариант (отлично работающий на С++), а реально это было бы килобайта 3 кода. очень элегантно, слов нет.

ну извините за ифы.
Так топикстартеру нужно динамическое конфигурирование структуры данных. Я говорю о том, что размах проблемы намного шире, чем он себе представляет. Сейчас ему надо просто сравнивать. А завтра он захочет пропорциональны регулятор поставить. А послезавтра импульсный пид регулятор (для регулировки подогрева пола, например).
С хорош для решения простых задач. Когда задача разростается и усложняется - Вы запутаетесь в коде. Как по мне лучше сразу забить половину флеша объектным кодом, зато получить задел на будущее.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 12:39:04 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
уже в runtime будет определяться что и с чем сравнивать

Может всё-таки variant как универсальный тип данных обмена между всеми участниками экосистемы? Т.е. у каждого модуля как ны выходе так и на входе универсальный variant - а сами объекты типа variant уже сами разбираются кто из них "круче".

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 13:55:46 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Siarzhuk писал(а):
Может всё-таки variant как универсальный тип данных обмена между всеми участниками экосистемы?
прямо-таки напрашивается сравнение числа 1E-99 cо строкой "ваще нихрена!" :)))

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 17:42:39 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
прямо-таки напрашивается сравнение числа 1E-99 cо строкой "ваще нихрена!" :)))

Ну до таких высот терпения духа герру Архитектору ещё дожить надо будет. Да и наличие в экосистеме акторов умеющих использовать лексический генератор таки преполагает оснащённость соответствующим ему анализатором тех кому приходится получать продукты общения - иначе вопрос вопросов "к чему это всё?" не доведёт до делирия лишь особенно стойких.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 20:37:26 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Siarzhuk писал(а):
Да и наличие в экосистеме акторов умеющих использовать лексический генератор таки преполагает
вообще-то я пытался намекнутть, что:
- во-первых, variant далеко не панацея
- во-вторых (и в главных!) автор топика слишком перемудрил с вариантами сравнения.

для системы, которая в run-time решает, что с чем сравнивать, необходимо и достаточно привести все варианты к наиболее подходящему одному, ведь очевидно, что сравнивать разные по смыслу данные, например, СИМВОЛ или СТРОКУ с ЧИСЛОМ - это бессмыслица. сравнивать можно строку со строкой, символ с символом, а число с числом, то есть данные одинаковых смыслов, а значит, и типов.
ну а для чисел нет смысла применять разные типы, т.к. float покроет любой практический диапазон. в результате нет никаких "загадочных" преобразований, все прозрачно и естественно, сравниваются всегда однотипные данные, всегда известно, какие именно типы. нет проблемы.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 21:06:26 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
на этом я пока и остановился. привел все к double


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Ср фев 21, 2018 22:44:12 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
ARV писал(а):
сравнивать можно строку со строкой, символ с символом, а число с числом

Символ легко можно сравнивать с числом.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 51 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y