SOS!
От: Rocker  
Дата: 04.08.02 01:46
Оценка:
Привет всем! У меня есть вопросик, который мне спать не дает
Сейчас клепаю компоненты под C++ Builder 6.0 и многие вещи приходится брать из исходников, написанных на Дельфи. Вот тут-то и возникает самое интересное:

  Type
    TNumGlyphs = 1..4;

  Const
    DownStyles: array[Boolean] of Integer = (BDR_RAISEDINNER, BDR_SUNKENOUTER);


Так вот как мне перевести такие записи на C++? Array[Boolean] я заменил на int DownStyles[2] = {....}, а вот с 1..4 проблемы... Сколько я не рылся в хелпе — ничего не нашел
Да и вообще мне кажется, что мои попытки перейти с Паскаля на С приведут меня к маниакальной депрессии
Заранее спасибо!
Re: SOS!
От: henson Россия http://www.njt-rails.com
Дата: 04.08.02 15:52
Оценка:
Здравствуйте Rocker, Вы писали:

Никогда не работал на дельфи, но я так понял, что массив нужен только для того, чтобы давать на выходе BDR_RAISEDINNER или BDR_SUNKENOUTER.
На Си обычно так не изгаляются, а пишут что-то вроде:
int n=(x?BDR_SUNKENOUTER:BDR_RAISEDINNER);
если x true, то вернется BDR_SUNKENOUTER

R> Привет всем! У меня есть вопросик, который мне спать не дает :)

R> Сейчас клепаю компоненты под C++ Builder 6.0 и многие вещи приходится брать из исходников, написанных на Дельфи. Вот тут-то и возникает самое интересное:
R>
R>
R>  Type
R>    TNumGlyphs = 1..4;

R>  Const
R>    DownStyles: array[Boolean] of Integer = (BDR_RAISEDINNER, BDR_SUNKENOUTER);
R>


R> Так вот как мне перевести такие записи на C++? Array[Boolean] я заменил на int DownStyles[2] = {....}, а вот с 1..4 проблемы... Сколько я не рылся в хелпе — ничего не нашел :(

R> Да и вообще мне кажется, что мои попытки перейти с Паскаля на С приведут меня к маниакальной депрессии :)
R> Заранее спасибо!
Re: SOS!
От: henson Россия http://www.njt-rails.com
Дата: 04.08.02 16:07
Оценка:
А что касается 1..4, то обрадовать ничем не могу, такого подхода в Си нет. Можно сделать перечисление через enum { .. } и для каждого значения присвоить соответственно 1,2,3,4. Так и исходник легче читать будет, но если надо 0..100, то уже проблема..
Re[2]: SOS!
От: Андрей Тарасевич Беларусь  
Дата: 04.08.02 17:40
Оценка:
Здравствуйте henson, Вы писали:

H>А что касается 1..4, то обрадовать ничем не могу, такого подхода в Си нет. Можно сделать перечисление через enum { .. } и для каждого значения присвоить соответственно 1,2,3,4. Так и исходник легче читать будет, но если надо 0..100, то уже проблема..


Если уж ты хочешь использовать 'enum' для типа 1..100, то достаочно просто написать так:

enum Type_1_100 { iFIRST = 1, iLAST = 100 };


Все.

Проблема-то не в этом. Проблема с 'enum' заключается в том, что к значениям типа 'enum' неприменимы операции типа '++'.
Best regards,
Андрей Тарасевич
Re: SOS!
От: Андрей Тарасевич Беларусь  
Дата: 04.08.02 17:42
Оценка:
Здравствуйте Rocker, Вы писали:

R> Сейчас клепаю компоненты под C++ Builder 6.0 и многие вещи приходится брать из исходников, написанных на Дельфи. Вот тут-то и возникает самое интересное:

R>
R>
R>  Type
R>    TNumGlyphs = 1..4;

R>  Const
R>    DownStyles: array[Boolean] of Integer = (BDR_RAISEDINNER, BDR_SUNKENOUTER);
R>


R> Так вот как мне перевести такие записи на C++? Array[Boolean] я заменил на int DownStyles[2] = {....},


Правильно сделал.

R> а вот с 1..4 проблемы... Сколько я не рылся в хелпе — ничего не нашел


Полного аналога диапазонных типов в С++ нет. Лучше просто используй подходящий целочисленный тип

typedef unsigned char TNumGlyphs;
Best regards,
Андрей Тарасевич
Re: SOS!
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.08.02 10:19
Оценка:
Здравствуйте Rocker, Вы писали:

R> Привет всем! У меня есть вопросик, который мне спать не дает

R> Сейчас клепаю компоненты под C++ Builder 6.0 и многие вещи приходится брать из исходников, написанных на Дельфи. Вот тут-то и возникает самое интересное:
R>
R>
R>  Type
R>    TNumGlyphs = 1..4;

R>  Const
R>    DownStyles: array[Boolean] of Integer = (BDR_RAISEDINNER, BDR_SUNKENOUTER);
R>


R> Так вот как мне перевести такие записи на C++? Array[Boolean] я заменил на int DownStyles[2] = {....}, а вот с 1..4 проблемы... Сколько я не рылся в хелпе — ничего не нашел

R> Да и вообще мне кажется, что мои попытки перейти с Паскаля на С приведут меня к маниакальной депрессии
R> Заранее спасибо!
Попробуй скомпилять билдером юнит на дельфи, у которого в интерфейсной секции задекларированы эти типы. Он сгенерит тебе хидер, в котором они будут отмаплены наиболее точным образом в билдеровые конструкции.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.