Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подсчитать количество объявлений
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
kurtis
Есть макрос который, описует конструктор класса
Код
#define UART0_SET(_func_name, _net_in, ........) \
        FunctionDesc _func_name( (uint8_t)_net_in, \
                                .........
                                    );                \


Таких объявлений несколько (около 10 штук) но их количество со временем меняется. Далее в программе есть цикл, где с этими классами в цикле что-то делается, но для того чтоб с ними делалось что-то хорошее, нужно каждый раз задавать ручками количество объявлений, а этот процес хочется как-то автоматизировать....

Вообщем, как проще всего автоматизировать подсчет количества элементов???
dxp
Цитата(kurtis @ May 28 2008, 23:59) *
Есть макрос который, описует конструктор класса
Код
#define UART0_SET(_func_name, _net_in, ........) \
        FunctionDesc _func_name( (uint8_t)_net_in, \
                                .........
                                    );                \

Можно узнать, зачем конструктор класса описывать с помощью макроса?

Цитата(kurtis @ May 28 2008, 23:59) *
Таких объявлений несколько (около 10 штук) но их количество со временем меняется. Далее в программе есть цикл, где с этими классами в цикле что-то делается, но для того чтоб с ними делалось что-то хорошее, нужно каждый раз задавать ручками количество объявлений, а этот процес хочется как-то автоматизировать....

Вообщем, как проще всего автоматизировать подсчет количества элементов???

В цикле обрабатываются объекты одного и того же класса или разных? Если одного и того же, то нельзя ли объявить массив объектов?

Насчет универсального решения, боюсь, что штатными средствами препроцессора тут сделать вряд ли удастся - ту же раздельную компиляцию препроцессор не преодолеет. Может, переформулировать вопрос, чтобы понятнее было, что вообще надо-то получить в конечном итоге? Может тогда найдутся альтернативные решения.
kurtis
Цитата(dxp @ May 29 2008, 09:25) *
Можно узнать, зачем конструктор класса описывать с помощью макроса?

мне так удобней, никакого особого смысла тут нету...

Цитата(dxp @ May 29 2008, 09:25) *
В цикле обрабатываются объекты одного и того же класса или разных? Если одного и того же, то нельзя ли объявить массив объектов?

Одного. Можно=)
Но проблема в том что я незнаю как сказать компилятору сколько у меня обьектов не указывая явно это число

есть 2 макроса, создающих обьекты

Код
UART0_SET(Func1, 0x51, 0x51, 'd', data_from_term, data_for_term)
UART0_SET(Func2, 0x52, 0x52, 'd', data_from_term1, data_for_term1)


есть массив обьектов

Код
FunctionDesc* pUSART0_info[NUM_OF_DEFS] =
{
    &Func1,
    &Func2
};


далее где-то в программе

Код
    for(i=0;i<NUM_OF_DEFS;i++) {    
        pUSART0_info[i]->drv();
        pUSART0_info[i]->show_mnem();

и тд....

так вот я именно незнаю как компилятору сказать значение NUM_OF_DEFS , не указывая его явно!!!такое нужно т.к. иногда добавляя (удаляя) обьекты, забываю изменить значение этой константы, и программа начинает вести себя самым неприличным образом!!!

Думал сделать что-то вроде
Код
#define NUM_OF_DEFS 0

.............

#ifdef NUM_OF_DEFS
#define NUM_OF_DEFS NUM_OF_DEFS+1
#endif

и вставить это куда-то в макрос, но компилятор не хочет переваривать такую конструкцию...
Сергей Борщ
Цитата(kurtis @ May 29 2008, 15:36) *
А если
Код
FunctionDesc* pUSART0_info[] =
{
    &Func1,
    &Func2
};
далее где-то в программе
Код
    for(i=0; i< sizeof(pUSART0_info) / sizeof(pUSART0_info[0]);i++) {    
        pUSART0_info[i]->drv();
        pUSART0_info[i]->show_mnem();
kurtis
Да!!!То что нужно, спасибо=)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.