Привет всем! У меня есть вопросик, который мне спать не дает
Сейчас клепаю компоненты под 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 проблемы... Сколько я не рылся в хелпе — ничего не нашел

Да и вообще мне кажется, что мои попытки перейти с Паскаля на С приведут меня к маниакальной депрессии

Заранее спасибо!
Здравствуйте 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> Заранее спасибо!
А что касается 1..4, то обрадовать ничем не могу, такого подхода в Си нет. Можно сделать перечисление через enum { .. } и для каждого значения присвоить соответственно 1,2,3,4. Так и исходник легче читать будет, но если надо 0..100, то уже проблема..
Здравствуйте henson, Вы писали:
H>А что касается 1..4, то обрадовать ничем не могу, такого подхода в Си нет. Можно сделать перечисление через enum { .. } и для каждого значения присвоить соответственно 1,2,3,4. Так и исходник легче читать будет, но если надо 0..100, то уже проблема..
Если уж ты хочешь использовать 'enum' для типа 1..100, то достаочно просто написать так:
enum Type_1_100 { iFIRST = 1, iLAST = 100 };
Все.
Проблема-то не в этом. Проблема с 'enum' заключается в том, что к значениям типа 'enum' неприменимы операции типа '++'.
Здравствуйте 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;
Здравствуйте 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> Заранее спасибо!
Попробуй скомпилять билдером юнит на дельфи, у которого в интерфейсной секции задекларированы эти типы. Он сгенерит тебе хидер, в котором они будут отмаплены наиболее точным образом в билдеровые конструкции.