Приветствую, форумчане!
Прошу помощи в идеях. Не могу перешагнуть следующую задачу.
Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта). Тип каждого аргумента может задаваться отдельно, например в enum:
[uquote="RealHann",url="/forum/viewtopic.php?p=3305193#p3305193"]Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта)[/uquote]
Чёто мне это напоминает, вопрос на тему: как и нафига? Да и как сравнивать тёплое с мягким?
Во первых: всё зависит от компилятора, например билдер вас тупо пошлёт далеко и на долго с таким сравнением ибо компилятор настроен так что приравнивание и сравнение разных типов переменных подразумевается как ошибка.
Во вторых: _cmp_char = 'C', это прокатит, а все остальные это не символьные элементы а числовые, и тут всё зависит от компилятора, некоторые позволяют вот такое _cmp_ushort = 'U', при этом данная переменная будет иметь значение кода данного символа исходя из таблицы ASCII. С флоатом такое точно не прокатит.
В третьих: если компилятор не проигнорировал и переварил сравнение разных типов, то он будет тупо сравнивать числовые значения опять же взятый из таблицы ASCII.
alex_ писал(а):_cmp_char = 'C', это прокатит, а все остальные это не символьные элементы а числовые
Все эти элементы - вообще элементы enum, а он имеет, если не ошибаюсь, тип int.
А зачем вообще весь этот геморрой? Сделайте оба аргумента float, а где им присваиваются значения других переменных разных типов просто приводите к float.
[uquote="AndyBig",url="/forum/viewtopic.php?p=3305520#p3305520"]Все эти элементы - вообще элементы enum, а он имеет, если не ошибаюсь, тип int.[/uquote]
Кстати да. Давно не работал с enum.
Сделайте оба аргумента float, а где им присваиваются значения других переменных разных типов просто приводите к float.
Ну тут всё относительно, хотя в целом можно, но вот как сравнивать числовой и знаковый, по коду ASCII?
alex_ писал(а):но вот как сравнивать числовой и знаковый, по коду ASCII?
Там вроде только числовые перечислены, знаковые и беззнаковые разной разрядности. Можно привести их все к единому типу - тот же float или double и сравнивать
RealHann писал(а):enum по умолчанию 8 бит
Хм, может я что-то забыл, но вроде бы разрядность enum по умолчанию равна разрядности процессора.
[uquote="alex_",url="/forum/viewtopic.php?p=3305382#p3305382"][uquote="RealHann",url="/forum/viewtopic.php?p=3305193#p3305193"]Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта)[/uquote]
Чёто мне это напоминает, вопрос на тему: как и нафига?[/uquote]
Мне тоже интересно зачем такое надо.
И вопрос топикстартеру. int имеет размер 32бита; можете сказать "навскидку" что выдаст следующий код на экран (Выведет "Да" или "Нет"):
[uquote="AndyBig",url="/forum/viewtopic.php?p=3307281#p3307281"]Зависит от компилятора и целевого процессора.[/uquote]
Это и была конкретизация целевой платформы. Читать так:
Допустим, на конкретной платформе тип int 32-х битный, можете сказать "навскидку" что выдаст следующий код на экран (Выведет "Да" или "Нет")?
[uquote="RealHann",url="/forum/viewtopic.php?p=3305193#p3305193"]Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта).[/uquote]
Исходная задача, впрочем, так и не озвучена - придётся предполагать общеизвестные сюжеты. Положа руку на сердце, при таком подходе вашему С плюсы и незачем - достаточно структур и функций.
Попробуйте поискать вдохновение в какой-нибудь из реализаций типа данных variant . Объект класса содержит union поле, со всеми поддерживаемыми типами, и enum поле, указывающее на тип содержащихся данных. Оба приватные, доступ и прочие сравнения - через перегруженные операторы.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
это один из виртуальных объектов общего конструктора. выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >
RealHann писал(а):выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >
сюр какой-то... просто так сравнение чего-то с чем-то делает оператор сравнения. и если для вашего "сравнивателя" надо указывать, что с чем сравнивать, то чем это отличается от тупой записи оператора А>B?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
RealHann писал(а):выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >
сюр какой-то... просто так сравнение чего-то с чем-то делает оператор сравнения. и если для вашего "сравнивателя" надо указывать, что с чем сравнивать, то чем это отличается от тупой записи оператора А>B?[/uquote]
можно, конечно. через уйму if-ов. если у меня 7 возможных типов, то 49 if-ов выглядят тупо. c A>B