# include <stdio.h>
# include <string>
/*
[tswitch( T , V )]
T - тип перебора.
V - значение с которым сравниваем.
*/
# define tswitch( T , V )\
if( int __tswitch_check = 0 );\
else for(\
const T &__tswitch_value(V);\
__tswitch_check == 0;\
++__tswitch_check )\
{int __tswitch_open = 0;
# define tcase( D )\
}if( __tswitch_open || __tswitch_value == D ){__tswitch_open = 1;
# define tdefault break;__tswitch_open = 0;};
# define tbreak break;__tswitch_open = 0;
void main()
{
std::string name = "True";
tswitch(std::string, name)
{
tcase("True")
tcase("Vasya")
{
printf("fff");
}tbreak;
tcase("Guull")
printf("ggg");
tbreak;
tdefault
printf("dds");
}
}
Вот выставил на критику..
Имеет ли это шанс на жизнь?
Есть ограничение.. =(
tdefault
printf("dds");
tdefault Обязателен.. и обязательно в конце! =)
А так кажеться.. все ок. =)
З.Ы. Есть вариант где можно перебрать масивы. ([],STL)
FOR_EACH(_Winnie) + tswitch(IROV..) = tforswitch;
Здравствуйте, IROV.., Вы писали:
IRO>FOR_EACH(_Winnie) + tswitch(IROV..) = tforswitch;
эх, любит же народ извращаться...
одно точно могу сказать:
FOR_EACH можно сразу в мусоркуАвтор: yxiie
Дата: 20.01.05
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, IROV.., Вы писали:
IRO>IRO># include <stdio.h>
IRO># include <string>
IRO>/*
IRO>[tswitch( T , V )]
IRO>T - тип перебора.
IRO>V - значение с которым сравниваем.
IRO>*/
// Было бы неплохо это покрасивше написать, а то непонятно с первого раза что идет куда ;)
// Названия переменных лучше не начинать с __, а лучше назвать скажем - tswitch_check__unique__name__
IRO>#define tswitch( T , V )\
IRO> if( int __tswitch_check = 0 );\
IRO> else for(\
IRO> const T &__tswitch_value(V);\
IRO> __tswitch_check == 0;\
IRO> ++__tswitch_check )\
IRO> {int __tswitch_open = 0;
IRO>#define tcase( D )\
IRO> }if( __tswitch_open || __tswitch_value == D ){__tswitch_open = 1;
// Здесь точка с запятой в конце лишняя.
//
// Может лучше - #define tdefault() ?
//
// Или #define tdefault break;__tswitch_open = 0;}label
// Тогда можно писать будет tdefault: :-)
IRO>#define tdefault break;__tswitch_open = 0;};
IRO>#define tbreak break;__tswitch_open = 0;
IRO>void main()
IRO>{
IRO> std::string name = "True";
IRO> tswitch(std::string, name)
IRO> {
IRO> tcase("True")
IRO> tcase("Vasya")
IRO> {
IRO> printf("fff");
IRO> }tbreak; // в определении макроса уже есть точка с зяпятой, надо определиться где она будет
IRO> tcase("Guull")
IRO> printf("ggg");
IRO> tbreak;
IRO> tdefault
IRO> printf("dds");
IRO> }
IRO>}
IRO>
IRO>Вот выставил на критику..
IRO>Имеет ли это шанс на жизнь?
Все имеет право на жизнь
IRO>Есть ограничение.. =(
IRO>IRO>tdefault
IRO> printf("dds");
IRO>
IRO>tdefault Обязателен.. и обязательно в конце! =)
Если учесть что почти всегда есть метка default в switch, то можно не смотреть на это как ограничение.
IRO>А так кажеться.. все ок. =)
IRO>З.Ы. Есть вариант где можно перебрать масивы. ([],STL)
IRO>FOR_EACH(_Winnie) + tswitch(IROV..) = tforswitch;
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, IROV.., Вы писали:
IRO>>[ccode]
IRO>># include <stdio.h>
IRO>># include <string>
IRO>>/*
IRO>>[tswitch( T , V )]
IRO>>T — тип перебора.
IRO>>V — значение с которым сравниваем.
IRO>>*/
__>// Было бы неплохо это покрасивше написать, а то непонятно с первого раза что идет куда
__>// Названия переменных лучше не начинать с __, а лучше назвать скажем — tswitch_check__unique__name__
Окей поправим.. спасибки =)
IRO>>#define tswitch( T , V )\
IRO>> if( int __tswitch_check = 0 );\
IRO>> else for(\
IRO>> const T &__tswitch_value(V);\
IRO>> __tswitch_check == 0;\
IRO>> ++__tswitch_check )\
IRO>> {int __tswitch_open = 0;
IRO>>#define tcase( D )\
IRO>> }if( __tswitch_open || __tswitch_value == D ){__tswitch_open = 1;
__>// Здесь точка с запятой в конце лишняя.
__>//
__>// Может лучше — #define tdefault() ?
__>//
__>// Или #define tdefault break;__tswitch_open = 0;}label
__>// Тогда можно писать будет tdefault:
Да, действительно, ща буду смотреть.
IRO>>void main()
IRO>>{
IRO>> std::string name = "True";
IRO>> tswitch(std::string, name)
IRO>> {
IRO>> tcase("True")
IRO>> tcase("Vasya")
IRO>> {
IRO>> printf("fff");
IRO>> }tbreak; // в определении макроса уже есть точка с зяпятой, надо определиться где она будет
Сенкс =)
Не-е-е... Ну зачем так извращаться?

По-моему такие навороты не упрощают код а наоборот делают его менее читаемым. Здесь извратимся, там извратимся... Как потом читать такой изврат в куче файлов?
Здравствуйте, Аноним, Вы писали:
А>Не-е-е... Ну зачем так извращаться?
По-моему такие навороты не упрощают код а наоборот делают его менее читаемым.
A>Здесь извратимся, там извратимся... Как потом читать такой изврат в куче файлов? 
Когда один и тот же изврат в куче файлов, это называется Coding Style Standard
Здравствуйте, ruslan_abdikeev, Вы писали:
_>Когда один и тот же изврат в куче файлов, это называется Coding Style Standard
это не стандарт, это ребячество какое-то
... << RSDN@Home 1.1.3 stable >>