powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тащусь от Qt
25 сообщений из 81, страница 3 из 4
Тащусь от Qt
    #33072128
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторФункторы прекрасно решают эту проблему
Функторы, как и интерфейсы - стрельба из пушек по воробьям с точки зрения решения этой конкретной проблемы.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33072494
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ИнтеграторФункторы прекрасно решают эту проблему
Функторы, как и интерфейсы - стрельба из пушек по воробьям с точки зрения решения этой конкретной проблемы.

Повторяю ещё раз - функторы являются удобными как с точки зрения использования так и с точки зрения эффективности. Единственная проблема - то что некоторые товарищи не умеют толком ими пользоваться. Если вы не согласны с этим - приводите пожалуйста аргументы.

Альтернативное решение - идеология Java где всё коллбэки делаются через реализацию интерфейса.

Кстати предлагаю закрыть тему обсуждения прелестей убогих дельфятников и прочего ширпотреба ;) либо перейти в соответсвующую ветку - где она была на этом форуме :)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073111
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторПовторяю ещё раз - функторы являются удобными как с точки зрения использования так и с точки зрения эффективности.
Функторы не являются чем-то особенным ни с точки зрения использования, ни с точки зрения эффективности.

ИнтеграторЕдинственная проблема - то что некоторые товарищи не умеют толком ими пользоваться. Если вы не согласны с этим - приводите пожалуйста аргументы.
Привожу. Такие же категорические и неаргументированные утверждения, как и мой уважаемый оппонент :)

ИнтеграторАльтернативное решение - идеология Java где всё коллбэки делаются через реализацию интерфейса.
Интересно. Я сказал "функторы, как и интерфейсы" - и теперь Вы мне сообщаете, что интерфейсы являются альтернативным решением.

Если честно, я не вижу разницы между функторами и интерфейсами. Техническую, конечно, можно найти - но принципиальной не вижу.

ИнтеграторКстати предлагаю закрыть тему обсуждения прелестей убогих дельфятников и прочего ширпотреба ;) либо перейти в соответсвующую ветку - где она была на этом форуме :)
Без проблем. И функторы - в соответствующую им тему. Договорились?
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073406
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я любил Делфи. Отношусь к семёре с большим трепетом. Разных слов интересных типа "функтор" незнаю. На сях два креста серьёзно ещё не програмил. Про пушку против воробьёв предлагаю забыть. Ведь если вам завтра сдавать проект вы выберете то средство, на котором быстрей напишете.

А КуТэ сильна, имхо, тем, что имея текстовый редактор, qmake, make и gcc можно БЫСТРО и КАЧЕСТВЕННО собрать проект с ПОНЯТНЫМ кодом и КРАСИВЫМ интерфейсом.

Где-то читал, что если 99% делфийцев лишить делфи, то они впадут в кому. КуТэшников в кому вогнать навеное труднее.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073410
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, учтите ещё что трольь расширил синтаксис С++. За счёт метаобъектов. Это, конечно, ограничивает совместимость (если забыть про moc) со стандартом. Но удобство от этого врядли страдает.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073541
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратору пора открыть тему "Я тащусь от функтороы". Извините, не сдержался, больше не повторится
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073815
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another catИнтегратору пора открыть тему "Я тащусь от функтороы". Извините, не сдержался, больше не повторится
=====
Cat и его покойный друг Chicago

Я не от чего не тащусь :) Просто уже утомили предубеждения против некоторых языковых крнструкций... Вместо того что бы разобраться и потренироваться в использовании на практике начинается флуд про языковое уродство и сложность.



Интересно. Я сказал "функторы, как и интерфейсы" - и теперь Вы мне сообщаете, что интерфейсы являются альтернативным решением.


Функторы и интерфейсы являются бузесловно жэквивалентными в плане функциональности конструкцями - но достаточно различными с концептуальной точки зрения и проекторования приложения. Чрезе интерфейс вы не реализуете в одном классе поюддрежку двух разных OnClick например :) Ничем особенным функтиоры не являются - имеено как раз это я и пытался объяснить в ответ на утвердение что реализация концепции СЛОТов в КуТэ - это классно и сверх удобно, а функторы - сложно и непрактично

Расширять синтаксис С++ - по моему это вообще безобразие , наболюдался так же в Билдере :). Если вы расширяете С++ - то уж будьте добра называйте не С++ а какой-нить QT++ :), на С++ есть стандарт который все компиляторы обязаны выполнять что бы называться компиляторами С++ ;) Если бы стандарта небыло - то другое дело...


А КуТэ сильна, имхо, тем, что имея текстовый редактор, qmake, make и gcc можно БЫСТРО и КАЧЕСТВЕННО собрать проект с ПОНЯТНЫМ кодом и КРАСИВЫМ интерфейсом.


С этим никто и не спорит ;) Вот на дельфятнике тоже можно быстро наваять - и это совершенно не значит что библиотека хорошо спроектирована Кстати что качается QT то она правда хороршо продумана в отличии от борладовых детищей - у них как -то всегда туго с проектированием было, один Turbo-Vision чего стоил :)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073992
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Интегратор:

Странно, я тут тоже пытался сказать, что функторы ничем особенным не являются. И все дело действительно в привычке.

// Не обижайтесь, но если вас что-то задолбало, то это только ваша проблема.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33073994
Несчастный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторКстати предлагаю закрыть тему обсуждения прелестей убогих дельфятников и прочего ширпотреба ;) либо перейти в соответсвующую ветку - где она была на этом форуме :)

И следующий пост:

ИнтеграторВместо того что бы разобраться и потренироваться в использовании на практике начинается флуд про языковое уродство и сложность.


С точки зрения медицины - шизофрения.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074161
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несчастный ИнтеграторКстати предлагаю закрыть тему обсуждения прелестей убогих дельфятников и прочего ширпотреба ;) либо перейти в соответсвующую ветку - где она была на этом форуме :)

И следующий пост:

ИнтеграторВместо того что бы разобраться и потренироваться в использовании на практике начинается флуд про языковое уродство и сложность.


С точки зрения медицины - шизофрения.

Из серии "Когда заканчиваются аргументыначинают придираться к русскому языку" (с)

И какие противоречия вы нашли в этих постах ? Почитайте внимательнее контекст.


Странно, я тут тоже пытался сказать, что функторы ничем особенным не являются. И все дело действительно в привычке.


Есть ещё один момент - функторы - стандартная идиома С++, концепция слотов - концепция библиотеки QT ;). И ничего особенного красивого в этой концепции нет по сравнению например с функторами - в этом мнении мы кажется сошлись ...
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074164
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вторая часть сообщения была к Yet another cat
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074174
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путь Дельфы - RAD. И это путь всего программирования под винду. Я думал, что RAD - это круто. Можно не вникать в тонкости типа внутренних наваротов библиотеки. Ведь действительно, зачем задумываться о таких высоких материях, когда надо срочно сваять клиент к базе данных для видеопроката внизу. В дельфе это просто, как хрен знает что. Половина (а то и больше!) времени разработки такой программы - накликивание соответствующих компонентов на форме и установка им нужных пропертис. Потом добавляем пару кнопочек со стандартными запросами и пару диалогов для добавления записей. Всё!
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074185
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторЧрезе интерфейс вы не реализуете в одном классе поюддрежку двух разных OnClick например :)
Не уверен, что понял Вашу мысль. Есть какие-то гипотезы и какие-то ответы, но прошу просто пояснить либо набросать пример, что Вы имеете в виду.

ИнтеграторРасширять синтаксис С++ - по моему это вообще безобразие .. есть стандарт который все компиляторы
Жалко, что такой позиции не придерживались лет пятнадцать-двадцать назад. Тогда C остался бы компактным и красивым языком. Собственно, objective C мне нравился и нравится куда больше, чем C++.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074193
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторЕсть ещё один момент - функторы - стандартная идиома С++, концепция слотов - концепция библиотеки QT ;).
Правда? :) Их разница - в возрасте, и вряд ли в чем-то еще.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074332
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ИнтеграторЕсть ещё один момент - функторы - стандартная идиома С++, концепция слотов - концепция библиотеки QT ;).
Правда? :) Их разница - в возрасте, и вряд ли в чем-то еще.

Неверно. Для реализации слотов и сигналов в Qt - нужен moc, дополнительный препроцессор, не предусмотренный стандартами языка. Для использования функторов достаточно, чтобы компилятор реализовывал стандарт ISO/IEC 14882. Так что тут Интегратор прав.

И если нужны только сигналы и не нужны другие компоненты, то Qt использовать неразумно. Модуляризация библиотеки в 4-й версии тут мало что изменит. Все равно в QtCore вместе с сигналами ты потащишь компоненты для работы с файлами, interprocess comunications, текстовые кодеки, контейнерные классы и пр. Это может быть и хорошо, но не во всех случаях.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074480
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ИнтеграторЧрезе интерфейс вы не реализуете в одном классе поюддрежку двух разных OnClick например :)
Не уверен, что понял Вашу мысль. Есть какие-то гипотезы и какие-то ответы, но прошу просто пояснить либо набросать пример, что Вы имеете в виду.



Хочу я в одном классе (вот такое у меня извращённое желание :) ) реализовать коллбэки для некоторого объекта - например той же несчатной кнопки Button. Через интерфейсы я сделаю


struct ButtonListener {
virtual void onClick(Event&) = 0;
};

class MyBigClass : public ButtonListener {
void onClick(Event& e) {
// обработчик
}
};

Проблема возникает если я хочу в одном классе поместить два разных обработчик для двухх различных кнопок. Наиболее логичный путь :

class MyBigClass {
void onButton1Click(Event& e) {
// обработчик
}
void onButton2Click(Event& e) {
// обработчик
}
};

Через функторы это разруливается естественным способом, через интерфейсы придётся извращаться ;)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074493
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinПуть Дельфы - RAD. И это путь всего программирования под винду. Я думал, что RAD - это круто. Можно не вникать в тонкости типа внутренних наваротов библиотеки. Ведь действительно, зачем задумываться о таких высоких материях, когда надо срочно сваять клиент к базе данных для видеопроката внизу. В дельфе это просто, как хрен знает что. Половина (а то и больше!) времени разработки такой программы - накликивание соответствующих компонентов на форме и установка им нужных пропертис. Потом добавляем пару кнопочек со стандартными запросами и пару диалогов для добавления записей. Всё!

Да кто же с вами спорит - если надо наваять маленького клиента к СУБД то и VB6 не грех использовать ;)

Мы тут скорее поднимаем философский вопрос о качестве и продуманности самой библиотеки а не скорости разработки в ней.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074504
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another catНеверно. Для реализации слотов и сигналов в Qt - нужен moc, дополнительный препроцессор, не предусмотренный стандартами языка.
"Не предусмотренный стандартами" - это довольно обширная область и показатель, зависящий в основном от полезности-распространенности фичи и именно что возраста. Окажутся слоты-сигналы чем-то безусловно полезным - в конце концов войдут в стандарт, как вошла STL.

Yet another catДля использования функторов достаточно, чтобы компилятор реализовывал стандарт ISO/IEC 14882.
Да в общем-то даже этого не необходимо :) Функторы - просто идея. Плюс те или иные реализации этой идеи. Говорить о "вхождении идеи в стандарт" для меня несколько странно.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074524
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты кричишь, что если люди не умеют юзать эти таинственные функторы, то это их проблемы. Согласен. Хотя, что такое функторы не знаю.
Но, если тебе не нравятся сигналы и слоты, то это проблемы не КуТэ.
Каждому своё. Методика сигналов и слотов мне понравилась сразу. Пусть это расширение стандарта. Пусть нужен moc. Но это в общем-то новаторская технология. Может стандарт их включит когданибудь.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074581
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторНаиболее логичный путь :
Как раз тот, который сделан в OP :)

ИнтеграторЧерез функторы это разруливается естественным способом, через интерфейсы придётся извращаться ;)
Возможно, у нас разное понимание "естественного способа" и "извращаться".

Лично для меня естественный способ решения такой задачи на C++/java -

Код: 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.
 public   class  MyBigClass {

  ....

  // Обработчик кнопки OK
  ActionListener lsnrBtnOk =  new  ActionListener() {
     public   void  actionPerformed(ActionEvent e) {
       try  {
        checkSelf();
        Kernel.safeFireAction ("actionCallApplyMethod", owner);}
       catch  (BaseException ex) {
        Kernel.showError (ex.createTransparent(Errors.CantApply, ""));}
       catch  (Exception ex) {
        Kernel.showError (ex);
      }  
    }
  };

  // Обработчик кнопки Cancel
  ActionListener lsnrBtnCancel =  new  ActionListener() {
     public   void  actionPerformed(ActionEvent e) {
      dispose();
    }
  };
}

Соответственно, будел ли ActionListener интерфейсом или функтором - разницы не вижу.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074639
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ИнтеграторНаиболее логичный путь :
Как раз тот, который сделан в OP :)

ИнтеграторЧерез функторы это разруливается естественным способом, через интерфейсы придётся извращаться ;)
Возможно, у нас разное понимание "естественного способа" и "извращаться".

Лично для меня естественный способ решения такой задачи на C++/java -

Код: 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.
 public   class  MyBigClass {

  ....

  // Обработчик кнопки OK
  ActionListener lsnrBtnOk =  new  ActionListener() {
     public   void  actionPerformed(ActionEvent e) {
       try  {
        checkSelf();
        Kernel.safeFireAction ("actionCallApplyMethod", owner);}
       catch  (BaseException ex) {
        Kernel.showError (ex.createTransparent(Errors.CantApply, ""));}
       catch  (Exception ex) {
        Kernel.showError (ex);
      }  
    }
  };

  // Обработчик кнопки Cancel
  ActionListener lsnrBtnCancel =  new  ActionListener() {
     public   void  actionPerformed(ActionEvent e) {
      dispose();
    }
  };
}

Соответственно, будел ли ActionListener интерфейсом или функтором - разницы не вижу.

я привёл пример - например когда я хочу поместить всех наблюдателей как методы одного класса возникает принципиальная проблема которая с интерфейсами не решается.

Например не хочу я классы новые тоннами плодить ;) Конечно что не факт что это нужно (хотя в С++ в отличии от Java всё таки более актульно), но налицо принципиальная неприятность.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074653
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinТы кричишь, что если люди не умеют юзать эти таинственные функторы, то это их проблемы. Согласен. Хотя, что такое функторы не знаю.
Но, если тебе не нравятся сигналы и слоты, то это проблемы не КуТэ.
Каждому своё. Методика сигналов и слотов мне понравилась сразу. Пусть это расширение стандарта. Пусть нужен moc. Но это в общем-то новаторская технология. Может стандарт их включит когданибудь.

Новаторская технология ??? Не смешите народ ...
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074938
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интеграторя привёл пример
Вы упускаете из вида, что я просто не понимаю, какую именно реализацию этого примера Вы имеете в виду.

Интеграторно налицо принципиальная неприятность.
Вот здесь - независимо от предыдущего возражу. Она именно что не принципиальная, а техническая. Теми или иными техническими соображениями может быть обусловлено преимущество именно Вашего подхода и соответственно преимущество функторов в случае конкретной реализации. Но ничего "принципиального" здесь не вижу.

Можно, конечно, погрузиться в обсуждение того, что есть "принципиально", но полагаю, это будет перебор. Поэтому - приведите, если не трудно, пример функторной реализации, которую Вы имеете в виду, и давайте закруглим.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33074966
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Интеграторя привёл пример
Вы упускаете из вида, что я просто не понимаю, какую именно реализацию этого примера Вы имеете в виду.

Интеграторно налицо принципиальная неприятность.
Вот здесь - независимо от предыдущего возражу. Она именно что не принципиальная, а техническая. Теми или иными техническими соображениями может быть обусловлено преимущество именно Вашего подхода и соответственно преимущество функторов в случае конкретной реализации. Но ничего "принципиального" здесь не вижу.


В с++ это приведёт к образованию множества ненужных классов и расползанию кода ;) В Java это предусмотрели :)


Можно, конечно, погрузиться в обсуждение того, что есть "принципиально", но полагаю, это будет перебор. Поэтому - приведите, если не трудно, пример функторной реализации, которую Вы имеете в виду, и давайте закруглим.

Если не возражаете - приведу завтра - сейчас к сожалегию нет времени
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33076351
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший пример из кода не выдеру - вот один из возможных вариантов - всё связывается в рантайме.

Привожу специально код без STL - всё написано с нуля (ну кроме smart_ptr:) )

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
struct BaseFunction {
	virtual void operator () (int) =  0 ;
	virtual ~BaseFunction() {} 
};

template<typename Class>
class Function : public BaseFunction {
public:
	typedef void (Class::*FuncType)(int);

	Function(Class& obj, FuncType func) : obj_(obj), func_(func) {}

	void operator () (int nVal) {
		(obj_.*func_)(nVal);
	}
protected:
	FuncType func_;
	Class&   obj_;
};

template<class T>
boost::shared_ptr<BaseFunction> makeFunc1(T* obj, void (T::*f)(int)) {
	return boost::shared_ptr<BaseFunction>(new Function<T>(*obj, f));
}

class Button {
	boost::shared_ptr<BaseFunction> listener_;
public:
	Button() { }

	void fireOnClick(int nVal) {
		if (listener_.get()) (*listener_)(nVal);
	}

	void setListener(boost::shared_ptr<BaseFunction> listener) {
		listener_ = listener;
	}
};

class SomeBigClass {
	Button btn1_, btn2_;
public:
	SomeBigClass() {
		btn1_.setListener(makeFunc1(this, onClick1));
		btn2_.setListener(makeFunc1(this, onClick2));
	}

	void run() {
		btn1_.fireOnClick( 69 );
		btn2_.fireOnClick( 13 );
	}

	void onClick1(int nVal) {
		std::cout<< "OnClick1" << std::endl;		
	}

	void onClick2(int nVal) {
		std::cout<< "OnClick2" << std::endl;		
	}
};

...
Рейтинг: 0 / 0
25 сообщений из 81, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тащусь от Qt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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