Илья Ермаков писал(а):
Ну, Вы знакомы с List в Delphi (или в Яве до-дженериковой)?
Вы делаете любую структуру данных, способную хранить ANYPTR (или Object, в терминах Delphi).
И любой динамический объект может быть помещён в эту структуру данных (указатель на него).
В общем через pointer в паскале или void* в си. Я хотел более культурно сделать.
Евгений Темиргалеев писал(а):
В не зависимости от того, обобщённая реализация или нет, она должна быть. И Вы собираетесь её писать. Так?
Тогда у меня к Вам просьба. Напишите реализацию например, списка, например для INTEGER; основные операции --- на Ваше усмотрение. И приведите нам здесь полный исходный текст реализации. На Си и на КП. Пожалуйста.
Я не совсем понял зачем Вам это? integer мне не нужен, мне нужно хранить структуры. И чем Вам не нравится реализация выше. Вот на си, на си была проба пера.
Банально, шлёпаем в начало списка.
Код:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool point_in_rect(int px, int py, int x, int y, int w, int h)
{
if ((px >= x) && (py >= y) && (px <= x + w) && (py <= y + h))
{
return true;
}
else
{
return false;
}
}
typedef struct _button_t button_t;
struct _button_t
{
char * name;
int pos_x;
int pos_y;
int size_w;
int size_h;
button_t * next;
};
button_t * table;
button_t * i;
button_t * button_new(char * name)
{
button_t * p = (button_t*)malloc(sizeof(button_t));
p->name = strdup(name);
p->next = table;
table = p;
return p;
}
button_t * button_find_pos(int x, int y)
{
button_t * p = table;
while (p != NULL)
{
if (point_in_rect(x, y, p->pos_x, p->pos_y, p->size_w, p->size_h) == true)
{
return p;
}
p = p->next;
}
return NULL;
}
int main(int argc, char **argv)
{
button_new("1");
button_new("2");
button_new("3");
button_new("4");
button_new("5");
i = table;
while (i != NULL)
{
printf("%s\n", i->name);
i = i->next;
}
return 0;
}
Madzi писал(а):
Вроде как на форуме уже была такая тема. С обобщёнными списками и т.п.
Да, то самое. Спасибо мне нужен был пример реализации.
Всём. Товарищи форумчани, тема не с++ vs кп. Я хотел узнать как на кп, борются с лишним кодом. Возможно ли для этого, заюзать расширенные записи.