Здравствуйте, yxiie, Вы писали:
L>>возможно ли написание макроса разворачивающего выражени типа "abcd" L>>в {'a', 'b', 'c', 'd'}?
Y>нет
...И я вспомнил Четырнадцатый том сочинений Боконона — прошлой
ночью я его прочел весь целиком. Четырнадцатый том озаглавлен
так:
"Может ли разумный человек, учитывая опыт прошедших веков,
питать хоть малейшую надежду на светлое будущее человечества?"
Прочесть Четырнадцатый том недолго. Он состоит всего из
одного слова и точки: "Нет".
-- Курт Воннегут, Колыбель для кошки.
Я же говорил, что сишний препроцессор — отстой. И его не исправить никакими бустами. Нужна новая концепция, причем, лучше бы — не "препроцессора", а просто макро-процессора, встроенного в компилятор.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, yxiie, Вы писали:
L>>>возможно ли написание макроса разворачивающего выражени типа "abcd" L>>>в {'a', 'b', 'c', 'd'}?
Y>>нет
MS>
...И я вспомнил Четырнадцатый том сочинений Боконона — прошлой
MS>ночью я его прочел весь целиком. Четырнадцатый том озаглавлен
MS>так:
MS> "Может ли разумный человек, учитывая опыт прошедших веков,
MS>питать хоть малейшую надежду на светлое будущее человечества?"
MS> Прочесть Четырнадцатый том недолго. Он состоит всего из
MS>одного слова и точки: "Нет".
MS>-- Курт Воннегут, Колыбель для кошки.
MS> Я же говорил, что сишний препроцессор — отстой. И его не исправить никакими бустами. Нужна новая концепция, причем, лучше бы — не "препроцессора", а просто макро-процессора, встроенного в компилятор.
McSeem2, это уже вызов
по большому счету на ответ нет вопроса в идеальном виде, но решить его можно:
?
если да, то мой вариант вам подойдет. вот только измените константу UNWIND_STR_MAX_LEN если планируете обрабатывать строки длинной более 80 символов.
ну и соответственно добавьте шифрование в UNWIND_STR_PARAM
? Y>если да, то мой вариант вам подойдет. вот только измените константу UNWIND_STR_MAX_LEN если планируете обрабатывать строки длинной более 80 символов. Y>ну и соответственно добавьте шифрование в UNWIND_STR_PARAM
К сожалению ваш пример не взирая кодирую или нет осталяет в ресурсах примерно 50 копий исходной строки.
Даже если свести линковщиков в одну строку, все равно открыто.
Здравствуйте, yxiie, Вы писали:
Y>так что кричать "препроцессор — отстой" пока рано
Отстой, отстой. А как не остой, конечно отстой
Ассемблерным макропроцессором подобные вещи делаются легко и непринужденно, а здесь — просто "убиться веником"
Да и вообще, это плохая идея — раздельное пре-процессирование. О макросах должен знать сам компилятор, а не препроцессор. Ну чтобы хотя бы для того, чтобы макросы и определения попадали в отладочную информацию. Соблюдение пространства имен, опять же.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
? Y>>если да, то мой вариант вам подойдет. вот только измените константу UNWIND_STR_MAX_LEN если планируете обрабатывать строки длинной более 80 символов. Y>>ну и соответственно добавьте шифрование в UNWIND_STR_PARAM
L>К сожалению ваш пример не взирая кодирую или нет осталяет в ресурсах примерно 50 копий исходной строки. L>Даже если свести линковщиков в одну строку, все равно открыто.
похоже что так. ну в принципе это было шаманство, и даже если сделать enable string pooling исправить не получится
средствами С++ решить врядли решаемо.
но если уже так сильно нужно можно воспользоваться таким perl скриптом
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, yxiie, Вы писали:
Y>>так что кричать "препроцессор — отстой" пока рано
MS>Отстой, отстой. А как не остой, конечно отстой MS>Ассемблерным макропроцессором подобные вещи делаются легко и непринужденно, а здесь — просто "убиться веником"
свои задачи я сишным препроцессором решаю тоже легко и непринужденно.
MS>Нужна новая концепция, причем, лучше бы — не "препроцессора", а просто макро-процессора, встроенного в компилятор.
если не хватает сяшного препроцессора и нужна новая концепция — прикрути perl в качестве препроцессора как тебе такая концепция?
MS>Да и вообще, это плохая идея — раздельное пре-процессирование. О макросах должен знать сам компилятор, а не препроцессор. Ну чтобы хотя бы для того, чтобы макросы и определения попадали в отладочную информацию. Соблюдение пространства имен, опять же.
есть такая замечательная вещь... template называется.... слыхал?
Здравствуйте, yxiie, Вы писали:
MS>>Нужна новая концепция, причем, лучше бы — не "препроцессора", а просто макро-процессора, встроенного в компилятор.
Y>если не хватает сяшного препроцессора и нужна новая концепция — прикрути perl в качестве препроцессора как тебе такая концепция?
Не хочу. Это будет возврат к временам первого компилятора C++, реализованного как препроцессор для C.
MS>>Да и вообще, это плохая идея — раздельное пре-процессирование. О макросах должен знать сам компилятор, а не препроцессор. Ну чтобы хотя бы для того, чтобы макросы и определения попадали в отладочную информацию. Соблюдение пространства имен, опять же.
Y>есть такая замечательная вещь... template называется.... слыхал?
Речь идет не о шаблонах, а именно о макросах. Это несколько разные вещи. Ну хорошо,я согласен на то, чтобы концепция шаблонов была расширена мощными макро-средствами, включая конкатенацию, repeat/enumerate/etc. А define-макросы запретить.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, c-smile, Вы писали:
CS>Ну ты шаман!
CS>Я предлагаю все нижеследующее заменить на CS>
CS>char s[]="abcd";
CS>
CS>Так как оно эквивалентно всему твоему безобразию заканчивающимся CS>на CS>
CS>char s[]=UNWIND_STR("abcd");
CS>
А если так:
int s[]=UNWIND_STR("abcd");
Не все так просто. Уважаемый Ухие привел просто демонстрацию метода. Но все равно я не завидую тому, кому придется разбираться с подобными наворотами. Это чисто гимнастика для ума, которая не должна применяться на практике. Ибо нефиг.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, yxiie, Вы писали:
Y>похоже что так. ну в принципе это было шаманство, и даже если сделать enable string pooling исправить не получится Y>средствами С++ решить врядли решаемо.
не — обрабатывать отдельным слоем я не хочу. все должно быть просто.
у меня есть еще пара идей.