реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Перебрать все члены структуры
Jenya7
сообщение May 25 2015, 07:09
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



я могу перебрать в итерации все члены массива.
Код
for (i=0; i < sizeof(array); i++)
{
    array[i] =i;
}


а можно сделать что то подобное со структурой или объединением?

Сообщение отредактировал Jenya7 - May 25 2015, 07:09
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2015, 07:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Через массив указателей на члены.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 07:30
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(jcxz @ May 25 2015, 12:19) *
Через массив указателей на члены.

это не генерик
под каждую структуру лепить массив указателей. что мы выигрываем?

Сообщение отредактировал Jenya7 - May 25 2015, 07:32
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 25 2015, 07:54
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jenya7 @ May 25 2015, 10:09) *
я могу перебрать в итерации все члены массива.
Код
for (i=0; i < sizeof(array); i++)
{
    array[i] =i;
}

sizeof даст вам размер массива в байтах, а не количество членов.
А что можно сделать одинакового с членами структуры?
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2015, 08:59
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ May 25 2015, 13:30) *
это не генерик
под каждую структуру лепить массив указателей. что мы выигрываем?

А что Вы хотите выиграть? Что такое "указатель на член структуры" знаете?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 09:03
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(jcxz @ May 25 2015, 13:59) *
А что Вы хотите выиграть? Что такое "указатель на член структуры" знаете?

дайте пример.


Цитата(ViKo @ May 25 2015, 12:54) *
sizeof даст вам размер массива в байтах, а не количество членов.
А что можно сделать одинакового с членами структуры?

член структуры можно проанализировать и в соответствии кто он принять решение.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 25 2015, 09:54
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jenya7 @ May 25 2015, 12:03) *
член структуры можно проанализировать и в соответствии кто он принять решение.

А как вы узнаете, какой это член? Работайте с каждым членом отдельной функцией. Или целиком со всей структурой, по элементам.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 10:45
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ViKo @ May 25 2015, 14:54) *
А как вы узнаете, какой это член? Работайте с каждым членом отдельной функцией. Или целиком со всей структурой, по элементам.

отдельной функцией, куча функций надо писать. хочется кратко и элегантно.


ну к примеру
Код
typedef union
{
    void (*fp1p)(void);
    void (*fp2p)(uint32_t);
    void (*fp3p)(uint32_t, uint32_t);
    void (*fp4p)(uint32_t, uint32_t, uint32_t);
    uint32_t (*fp5p)(uint32_t);
    uint32_t (*fp6p)(uint32_t, uint32_t);
    uint32_t (*fp7p)(uint32_t, uint32_t, uint32_t);
} fp;

struct command
{
    char *name;  //command name
    uint32_t minargs;
    uint32_t maxargs;
    int minval;
    int maxval;
    fp read_func_pointer;
    fp write_func_pointer;
};

если бы я мог написать
Код
if(arg_count == 0)
{
   uint32_t ret_val = commands[0].read_func_pointer[i];
}
else
{
     commands[0]. write_func_pointer[j];
}

было бы проще жить.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 25 2015, 10:59
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Вам надо обратиться к C++ с его полиморфизмом.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 11:10
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ViKo @ May 25 2015, 15:59) *
Вам надо обратиться к C++ с его полиморфизмом.

ну да. С++. с С# вообще горя бы не знал. sm.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение May 25 2015, 13:15
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Во-первых, у вас не структура, а юнион. И в данном случае ВСЕ его члены одинаковые.

А во-вторых, предлагаю крепко погуглить VA_ARGS.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2015, 13:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ May 25 2015, 15:03) *
дайте пример.

Откройте любой учебник по си на описании операторов .* и ->*
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 13:49
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(esaulenka @ May 25 2015, 18:15) *
Во-первых, у вас не структура, а юнион. И в данном случае ВСЕ его члены одинаковые.

А во-вторых, предлагаю крепко погуглить VA_ARGS.

так как мне выбрать член из юниона?
va_arg я реально не понял. посмотрел пару примеров...как то тяжко для моего мозга.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 25 2015, 14:32
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ May 25 2015, 16:49) *
так как мне выбрать член из юниона?

Вы попробуйте для начала ПОНЯТЬ, что такое union. А там, глядишь, и поймете, что перебирать-то и нечего.
Дальше уже сможете рассказать, что хотите сделать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 25 2015, 14:54
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zltigo @ May 25 2015, 19:32) *
Вы попробуйте для начала ПОНЯТЬ, что такое union. А там, глядишь, и поймете, что перебирать-то и нечего.
Дальше уже сможете рассказать, что хотите сделать.

да я уже написал что хочу сделать.
Код
if(arg_count == 0)
{
   uint32_t ret_val = commands[0].read_func_pointer[i](arg1);
}
else
{
     commands[0]. write_func_pointer[j](arg1, arg2);
}
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016