powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
25 сообщений из 422, страница 8 из 17
Различные структуры данных. Реализация
    #38883285
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owlесли тебе так уж хочется жить с одной функцией, ну перейди в объектную модель. Не пользуйся POD переменными.на С? можно примерчик?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
typedef struct {
   unsigned int type;
} Object;

typedef struct {
  Object o;
  unsigned int capacity;
  char data[0];
} String;

typedef struct {
  Object o;
  unsigned int data;
} Int;

typedef union {
   String s;
   Int i;
} Variant;

void foo (Variant *v) {
   unsigned int type = *((int*)v);
   switch (type) {
   case INT: ....
   case STRING: ....
   default: fprintf(ERRLOG, "unknown type");
   }
}


На самом деле это очень удобно использовать и очень несложно надстраивать.
Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883291
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.
Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/
Ну бдсм тоже для кого-то сплошное удовольствие ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883305
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.
Из известных библиотек на этом принципе основаны Photon и IUP. Первое насквозь коммерческое (но писать под него сплошное удовольствие) а второе тут: http://iup.sourceforge.net/
Ну бдсм тоже для кого-то сплошное удовольствие ))Да, да... мы уже знаем что ты не умеешь писать на Си.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883319
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДа, да... мы уже знаем что ты не умеешь писать на Си.
Че это вдруг не умею? Умею. И даже пишу, когда нет возможности использовать С++ (на данный момент это только драйвера).
Просто не вижу смысла писать на С с момента появления в С++ некоторого набора фич, которые позволяют писать код принципиально качественнее и быстрее. А конкретнее - смарт-указатели и исключения. То, что в С в принципе невозможно реализовать и то, что сокращает и упрощает код в десятки раз.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883375
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.ты серьёзно? то есть, вместо
Код: plaintext
1.
2.
createNode();
createNode( const char * );

ты предлагаешь наплодить доп.структур и чудовищный switch? При том, что структуры тоже необходимо как то называть.
Трудно не согласиться с Анатолием ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883390
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С мне напоминает бюрократическое государство.
Где у государства есть полная инфа про граждан, но оно все равно на каждый чих требует от них всевозможные справки, которые оно же и выдает.
У некоторых граждан это создает иллюзию порядка и того что от этих справок что-то зависит
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883391
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlДа, да... мы уже знаем что ты не умеешь писать на Си.
Че это вдруг не умею? Умею. И даже пишу, когда нет возможности использовать С++ (на данный момент это только драйвера).
Просто не вижу смысла писать на С с момента появления в С++ некоторого набора фич, которые позволяют писать код принципиально качественнее и быстрее. А конкретнее - смарт-указатели и исключения. То, что в С в принципе невозможно реализовать и то, что сокращает и упрощает код в десятки раз.Ну ты ж меня обвиняешь постоянно в неумении использовать С++... Вот наши неумения - явления одного порядка.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883397
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНу ты ж меня обвиняешь постоянно в неумении использовать С++... Вот наши неумения - явления одного порядка.
Отличие в том что мое мнение объективно основано на ваших ответах в темам по С++.
А ваше основано на обиде на мое мнение ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883405
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite OwlНа самом деле это очень удобно использовать и очень несложно надстраивать.ты серьёзно?Да. Я серьезно.
По существу все GUI библиотеки под Си используют один из двух подходов. Либо заводят множество функций на каждый тип объекта (glib, gtk), либо идут по пути создания структур с типом структуры в качестве первого члена и switch по ним (iup, photon).
Попробовав оба, лично я предпочитаю второй (структуры и switch). Больше гибкости и намного проще в поддержке.

egorychты предлагаешь наплодить доп.структур и чудовищный switch? При том, что структуры тоже необходимо как то называть.Посмотри на С++. Когда ты создаешь библиотеку классов, ты занимаешься тем-же самым. На практике, если мы зададимся целью написать аналогичные библиотеки решающие одну и ту-же задачу (на Си и С++), то количество структур будет точно равняться количеству классов.
И switch будет совсем не чудовищный. При наследовании этот switch будет решать всего одно условие: это структура ребенок или нет? Если нет, то напрямую вызывать родительский метод. Да, это будет слегка медленнее чем подход с классами, потому что мы в рантайме будем определять какая именно это структура и какой из перегруженных методов надо вызывать, а с классами эти вопросы решатся еще на этапе компиляции.
Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы. Плагины писать - не просто легко, а очень легко.

egorychТрудно не согласиться с Анатолием ))С ним легко не согласится. Достаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны. А у Анатолия, к сожалению, нету широты взгляда.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883409
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlнету широты взгляда
Сказал человек который считает что исключения зло ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883418
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskymayton,

Разница большая. У printf есть неустранимый недостаток - там нужно указывать тип аргумента даже если компилятору он известен и для вывода значения не нужно ничего больше знать.
Код: plaintext
1.
2.
size_t i = 0;
printf("%???", i);


Я лично никак не могу запомнить какой формат у size_t.
Каждый раз гадаю. Хотя по большому счету он там не нужен вообще.
Та да. Пока С99 не добавил %z/%t, приходилось дефайнами разруливать.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883421
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
>>Да, я серьёзно
сознайся, ты специально делаешь вид, что наследование и перегрузка - это одно и то же, правда? )))
речь ведь шла о перегрузке функций вообще, и о перегрузке операторов, в частности )))

>>Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы
ну да, шаблоны "Стратегия" и "Состояние", в плюсах их реализация выглядит красивее, потому что в нём есть встроенные средства для решения подобных вопросов, а в С приходится извращаться, как ты это не называй.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883423
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДостаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны.достаточно, действительно. Мой опыт мне говорит, что для объектной парадигмы лучше подходят языки, поддерживающие объектную парадигму )))
P.S. А то и Турбо-бэйсик можно языком системного программирования назвать, там ведь был доступ к прерываниям и прямой доступ в память ;-))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883429
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,
>>Да, я серьёзно
сознайся, ты специально делаешь вид, что наследование и перегрузка - это одно и то же, правда? )))
речь ведь шла о перегрузке функций вообще, и о перегрузке операторов, в частности )))Нет, это конечно не одно и то же, но это очень родственные вещи. Любая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки.
А что касается перегруженных операторов... Да, это в Си сделать не получится.

egorych>>Зато подход со структурами и switch позволяет добавлять и изменять "классы" прямо во время рантайма. Можно переопределять скины прямо во время работы
ну да, шаблоны "Стратегия" и "Состояние", в плюсах их реализация выглядит красивее, потому что в нём есть встроенные средства для решения подобных вопросов, а в С приходится извращаться, как ты это не называй.Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883432
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
>>Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки.
примерчик бы... твой пример про наследование не решает главной проблемы: отсутствия однотипных имён, о которых говорил MasterZiv, тебе всё одно придётся явно называть структуры, и вместо одной головной боли ты предлагаешь добавить сразу 7 )))

>>Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :)
не согласен, не получится "не менее надёжно и удобно". Не в "красоте" ведь дело. Если мне не надо изобретать из раза в раз таблицу виртуальных функций, то я, во первых, не ошибусь в её реализации, и, во вторых, мой код не будет загромождён ненужными рутинными подробностями, которые отлично может написать за меня компилятор.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883433
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite OwlДостаточно просто на практике попробовать все парадигмы и увидеть их сильные и слабые стороны.достаточно, действительно. Мой опыт мне говорит, что для объектной парадигмы лучше подходят языки, поддерживающие объектную парадигму )))
Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис.
А так, объектную парадигму можно применить практически к любому языку. Так же как и любую другую парадигму, к любому языку. В одних случаях это будет легче, в других сложнее, но .... парадигма это парадигма.


egorychP.S. А то и Турбо-бэйсик можно языком системного программирования назвать, там ведь был доступ к прерываниям и прямой доступ в память ;-))Это надо понимать что ты не видел системных программ написанных на Quick BASIC (который брат-близнец TB, но от Микрософта)?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883434
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЛюбая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки.
А можно пример?
Вот код на С++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void print(int v)
{
	printf("%i", v); 
}
void print(const char* v)
{
	printf("%s", v); 
}
int main()
{
	print(1);
	print("a");
	return 0;
}


Это перегрузка функции print двумя типами аргумента.
Как с помощью понимания того что перегрузка это "наследование от некоего общего предка" сделать такую перегруженную функцию не на любом языке, а хотя бы на С?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883437
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSashaMercuryкак вы предлагает сделать аналогичное на Си ?

Код: plaintext
1.
2.
struct TreeNode* createTreeNode();
struct TreeNode* createTreeNodeFromString(const char* w);



И таких XXXFromYYYY потом появляется с 10 штук, так что потом ещё приходится добавлять и

XXXFromYYYYWithZZZ

:D
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883438
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я плохо понял что предлагает сделать White Owl, возможно когда увижу ответ по примеру BS/Анатолия пойму.
Но как я понял предполагается добавление искусственных структур, и локальное усложнение программы. Потому вот такой вопрос.

Да, локально у нас что-то усложняется, но в цельной программе, насколько это будет органично ?
Отличаются ли способ Си, и перегрузка на С++ по части быстродействия ? Предполагаю, что на С++будет тратится время на выбор функций из всех возможных. На Си такого вроде-бы не должно возникать. Может быть ещё что-то не так.
И вот такой вопрос. Какие минусы при использовании перегрузки функций ?
Сколько функций максимум можно перегружать одним именем ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883439
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
>>Неверно. Опыт тебе должен говорить: Использовать объектную парадигму легче на языках поддерживающих объектный синтаксис.ну, это софистика уже пошла.
>>А так, объектную парадигму можно применить практически к любому языку.
эмулировать можно, где то лучше, где то хуже. Можно даже назвать это "я пишу в объектном стиле", а я это называю: "я умею строить вон какие крутые костыли"

>>Это надо понимать что ты не видел системных программ написанных на Quick BASIC
я и игры на бэйсике видел, не об этом ведь речь
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883440
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,
>>Предполагаю, что на С++будет тратится время на выбор функций из всех возможных.
с какой стати? внутреннее имя у каждой из этих функций - разное ведь. Об этом заботится компилятор, а не программист. В этом удобство то заключается.

>>Сколько функций максимум можно перегружать одним именем ?
до тех пор, пока не иссякнет фантазия в изобретении разных сигнатур для этого имени, то есть, теоретически, бесконечно ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883441
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryОтличаются ли способ Си, и перегрузка на С++ по части быстродействия ? Предполагаю, что на С++будет тратится время на выбор функций из всех возможных
Не отличается. Не будет.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883442
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНе отличается. Не будет.
Точнее, тот костыль, который приведет White Owl, он конечно будет отличаться от С++ по скорости. В худшую сторону ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883443
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,
>>Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки.
примерчик бы... твой пример про наследование не решает главной проблемы: отсутствия однотипных имён, о которых говорил MasterZiv, тебе всё одно придётся явно называть структуры, и вместо одной головной боли ты предлагаешь добавить сразу 7 )))
Почему не решает? Очень даже решает. Просто расширь пример из 17283801 до полноценного наследования, добавь в нужные структуры указатели на функции и получишь почти полную копию С++.
Посмотри на IUP хотя бы. Там есть практически один единственный тип данных IupHandle*. Конкретные объекты создаются через IupFrame(), IupButton(), IupMenu(), etc. А дальше опять одна единственная функция IupSetAttribute(IupHandle*, ....);
И вся палитра виджетов покрывается этим набором.

egorych>>Расширенный синтаксис многое может сделать "красивее". Но дело то в том, что часто можно решить задачу и на более кратком синтаксисе. Получится не менее надежно и удобно, а красота это дело вкуса :)
не согласен, не получится "не менее надёжно и удобно". Не в "красоте" ведь дело. Если мне не надо изобретать из раза в раз таблицу виртуальных функций, то я, во первых, не ошибусь в её реализации, и, во вторых, мой код не будет загромождён ненужными рутинными подробностями, которые отлично может написать за меня компилятор.Тоже не совсем верно.
Ты будешь делать таблицу функций только на "своем" уровне. Не забывай про наследование.
Да, в С++ за тебя это компилятор сделает, а в Си надо будет в конструкторе самостоятельно наполнить эту таблицу. Но это единственная сложность.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38883444
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlЛюбая перегрузка функций это по существу наследование от некоего общего предка, не всегда явно обозначенного. Понимание этого факта позволяет делать перегруженные функции практически в любом языке, а не только в тех которые явно имеют синтаксис перегрузки.
А можно пример?
Вот код на С++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void print(int v)
{
	printf("%i", v); 
}
void print(const char* v)
{
	printf("%s", v); 
}
int main()
{
	print(1);
	print("a");
	return 0;
}


Это перегрузка функции print двумя типами аргумента.
Как с помощью понимания того что перегрузка это "наследование от некоего общего предка" сделать такую перегруженную функцию не на любом языке, а хотя бы на С? 17283801
В данном случае общий предок это "некая переменная". Ну вот и сделай себе абстрактную переменную. Это будет конечно чуть сложнее чем с POD типами, но не намного.
...
Рейтинг: 0 / 0
25 сообщений из 422, страница 8 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]