Макрос tswitch
От: IROV..  
Дата: 12.02.05 13:41
Оценка:
#    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;
я не волшебник, я только учусь!
Re: Макрос tswitch
От: yxiie Украина www.enkord.com
Дата: 12.02.05 13:51
Оценка: +1
Здравствуйте, IROV.., Вы писали:

IRO>FOR_EACH(_Winnie) + tswitch(IROV..) = tforswitch;


эх, любит же народ извращаться...
одно точно могу сказать:
FOR_EACH можно сразу в мусорку
Автор: yxiie
Дата: 20.01.05
... << RSDN@Home 1.1.3 stable >>
Re: Макрос tswitch
От: _nn_  
Дата: 12.02.05 14:33
Оценка:
Здравствуйте, 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;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Макрос tswitch
От: Аноним  
Дата: 12.02.05 15:53
Оценка:
Здравствуйте, _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; // в определении макроса уже есть точка с зяпятой, надо определиться где она будет

Сенкс =)
Re: Макрос tswitch
От: Аноним  
Дата: 13.02.05 07:23
Оценка:
Не-е-е... Ну зачем так извращаться? По-моему такие навороты не упрощают код а наоборот делают его менее читаемым. Здесь извратимся, там извратимся... Как потом читать такой изврат в куче файлов?
Re[2]: Макрос tswitch
От: ruslan_abdikeev Россия http://aruslan.nm.ru
Дата: 13.02.05 08:14
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Не-е-е... Ну зачем так извращаться? По-моему такие навороты не упрощают код а наоборот делают его менее читаемым.
A>Здесь извратимся, там извратимся... Как потом читать такой изврат в куче файлов?
Когда один и тот же изврат в куче файлов, это называется Coding Style Standard
Re[3]: Макрос tswitch
От: yxiie Украина www.enkord.com
Дата: 13.02.05 08:22
Оценка:
Здравствуйте, ruslan_abdikeev, Вы писали:

_>Когда один и тот же изврат в куче файлов, это называется Coding Style Standard


это не стандарт, это ребячество какое-то
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.