powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тащусь от Qt
81 сообщений из 81, показаны все 4 страниц
Тащусь от Qt
    #33058581
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Библиотека пропитанна насквозь какой-то гениальностью.
Я раньше на Делфях писал и смело скажу: разработка пользовательского интерфейса в Qt ручками - ненамного более трудная задача чем в Делфе RAD'ом. А виджеты: это просто песня. Их не так много, как скажем, в той же делфе. Но сделанны они добротней. Одна возможность HTML-форматирования чего стоит. Специальный виджет для мастеров.
Полейте ещё это сверху кроссплатформенностью (сам не пробовал, но вроде она практически абсолютна)
Незнаю, как по производительности, но размер конечных файлов меня порадовал.

Поделитесь своим имхо.

ЗЫ: сори за офтоп.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33058704
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая же эта зараза дорогая..... :(
Вкусная, но дорогая.... Но вкусная.... но дорогая..... (ушел в депрессию)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33058718
AiSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может бесплатный Swing поизучаете? Не весь Qt (под Linux) платный, кстати.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33059334
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QT - это сказка. Мне нравится уже давно.

Все ждут 4 версию.

Зайдите посмотрите.
http://hardclub.donntu.edu.ua/projects/qt/pages/index.htm
http://qt.osdn.org.ua/
www.trolltech.com/


QT 3-Windows Free Edition:

http://kde-cygwin.sourceforge.net/qt3-win32/
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33059508
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinБиблиотека пропитанна насквозь какой-то гениальностью.
Библиотека действительно хорошая. Не скажу, что "легче, чем в дельфе", но для своего класса - отличное решение.

AiSKА может бесплатный Swing поизучаете?
Хм. Это чтобы еще ярче подчеркнуть, какая хорошая вещь Qt?
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33061024
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КуТэ бесплатна для некомерческого использования. Точнее не так: если твоя прога распространяется по GPL, то можешь юзать GPL'овскую КуТэ. Самый прикол, что это не ограничивает, скажем, разработку приложения на заказ. Просто с бинарником передаёшь заказчику исходники и говоришь, что если он свою прогу в нэте найдёт пусть не серчает:)

Кстати, я тут кричал насчёт простоты ручной разработки, а ведь есть ещё КуТэ десигнер. GPL'овский, кстати.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33061027
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё один момент порадовал. Если в делфях разрабатываешь визуальное приложение, то добавится всё. И, например, TCheckBox, который тебе может и не понабится. В КуТэ нужна тебе кнопочка, добавляешь qpushbutton.h. И бинарник не перегружен ненужными компонентами.

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

Ситуация несколько сложнее, на самом деле. Факт в том, что VCL не предназначалась для создания "мелких" программ; если хочется этим заняться - welcome to Key Objects Library для той же дельфы.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33062032
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕщё один момент порадовал. Если в делфях разрабатываешь визуальное приложение, то добавится всё. И, например, TCheckBox, который тебе может и не понабится. В КуТэ нужна тебе кнопочка, добавляешь qpushbutton.h. И бинарник не перегружен ненужными компонентами.

КуТэ 4 вроде скоро выйдет. А с ней и KDE 4.

Да ты гонишь :) То, что ты один заголовок на компонент добавляешь, это одно, а компоненты в бинарнике - совсем другое. Бинарник сам по себе, это еще не все. Все компоненты в любом случае тянутся динамической библиотекой libqt.so.3.0.bla-bla или qt-mt30.dll и пр. в зависимости от системы.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33063422
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕщё один момент порадовал. Если в делфях разрабатываешь визуальное приложение, то добавится всё. И, например, TCheckBox, который тебе может и не понабится. В КуТэ нужна тебе кнопочка, добавляешь qpushbutton.h. И бинарник не перегружен ненужными компонентами.

КуТэ 4 вроде скоро выйдет. А с ней и KDE 4.

Если вы в VCL юзаете только TButton и не юзаете TMemo например, то не много бы выигрыша дало бы исключения кода TMemo. Если просмотрите исходники, то основная часть кода содержится в TWinControl и его предках например.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33063547
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another catВсе компоненты в любом случае тянутся динамической библиотекой libqt.so.3.0.bla-bla или qt-mt30.dll и пр. в зависимости от системы.
Тоесть для работы КуТэ она должна быть воткнута на той машине, на которой юзается?
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33063792
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin Yet another catВсе компоненты в любом случае тянутся динамической библиотекой libqt.so.3.0.bla-bla или qt-mt30.dll и пр. в зависимости от системы.
Тоесть для работы КуТэ она должна быть воткнута на той машине, на которой юзается?

По умолчанию, да. На *nix-боксах нужен пакет qt (не devel, devel только разработчику требуется). А для виндовой версии нужно с программой qt-mt30.dll поставлять.

Но ты ведь можешь статическую компоновку использовать. Тогда будет один исполняемый файл, но больших размеров, чем сейчас у тебя получается.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33064108
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikkЕсли вы в VCL юзаете только TButton и не юзаете TMemo например, то не много бы выигрыша дало бы исключения кода TMemo.
Собственно, как раз он и исключается :) Хотя зависит от - VCL внутри достаточно сильно связана.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065353
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer LelikkЕсли вы в VCL юзаете только TButton и не юзаете TMemo например, то не много бы выигрыша дало бы исключения кода TMemo.
Собственно, как раз он и исключается :) Хотя зависит от - VCL внутри достаточно сильно связана.

Хм, проверил, действительно исключается )))
Но выигрыша большого все равно нет -- как съедали модули Controls и Forms львиную долю, так и съедают.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065614
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь в КуТэ тоже есть предки аля TControl и TForm.
Получается, что КуТэ - промежуточное звено (во, блин, эволюция) между исполняемым файлом и фиртуальными машинами.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065636
sleepless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в классе два метода, и один из них в коде не вызывается, то он конечно же не будет включен в бинарный код. А Вы здесь нащет разных компонент сомневаетесь.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065676
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sleepless wrote:
> Если в классе два метода, и один из них в коде не вызывается, то он
> конечно же не будет включен в бинарный код. А Вы здесь нащет разных
> компонент сомневаетесь.
это так, если неиспользуемый метод не виртуальный.
виртуальный метода включается всеравно.
проверил gcc 3.2.3 и cl 13.10.3052
вот такой код:
#include <stdio.h>
struct test
{
void method1()
{
printf("AAAAAAAAAA");
};
void method2()
{
printf("BBBBBBBBBB");
};
};

int main()
{
test t;
t.method1();
}
в полученном бинарнике строка AAAAAAAAAA присутствует, а строка
BBBBBBBBBB нет
однако такой код:
#include <stdio.h>
struct test
{
void method1()
{
printf("AAAAAAAAAA");
};
virtual void method2()
{
printf("BBBBBBBBBB");
};
};

int main()
{
test t;
t.method1();
}
дает в бинарнике обе строки.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065833
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sleeplessЕсли в классе два метода, и один из них в коде не вызывается, то он конечно же не будет включен в бинарный код. А Вы здесь нащет разных компонент сомневаетесь.

Это да, но беда в том, что для обеспечения универсальности все библиотеки производят кучу редко нужных действий (взять тот же вызов ShowMessage в Delphi, хотя ведь в конечном счете он сводится только к MessageBoxA).
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065843
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelikk(взять тот же вызов ShowMessage в Delphi, хотя ведь в конечном счете он сводится только к MessageBoxA).
Жаль только, что никто в Борланде об этом не знает. А так - теория красивая.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065904
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мало ли кто от чего тащится. Некоторые вот клей нюхают. Но зачем об этом кричать.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33065937
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КуТэ круче, чем клей
Бросайте свои VCL'ы и MFC и пересаживайтесь на КуТэ. Не пожалеете.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33066418
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinКуТэ круче, чем клей
Бросайте свои VCL'ы и MFC и пересаживайтесь на КуТэ. Не пожалеете.

Если уж говорить об эффективности то более "тонкой" и шустрой штуки чем WTL напрятли можно придумать :)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33066803
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор SarinКуТэ круче, чем клей
Бросайте свои VCL'ы и MFC и пересаживайтесь на КуТэ. Не пожалеете.

Если уж говорить об эффективности то более "тонкой" и шустрой штуки чем WTL напрятли можно придумать :)

А на Qt проще программировать. Это тоже сторона эффективности. И она мультиплатформенная.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33066959
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another cat Интегратор SarinКуТэ круче, чем клей
Бросайте свои VCL'ы и MFC и пересаживайтесь на КуТэ. Не пожалеете.

Если уж говорить об эффективности то более "тонкой" и шустрой штуки чем WTL напрятли можно придумать :)

А на Qt проще программировать. Это тоже сторона эффективности. И она мультиплатформенная.

На НЕТе ещё проще программировать - и что ? :)

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

Беда только в том, что ПХП и НЭТ, в отличие от КуТэ, исполняемых файлов не выдают.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067154
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор Yet another catА на Qt проще программировать. Это тоже сторона эффективности. И она мультиплатформенная.

На НЕТе ещё проще программировать - и что ? :)

PS Кроссплатформенность нужна длеко не каждому ;)

На НЕТе? Не знаю. В смысле сомневаюсь. Мне кажется, что концепция слот-сигнал в Qt попроще для понимания, чем делегаты.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067172
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем точно выразился. И у делегатов, и у слотов с сигналами суть одна - как вызвать метод известной сигнатуры у объекта, класс которого при разработке вызывающей части кода неизвестен. А вот синтакс для Qt попроще ИМХО.
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067207
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another cat wrote:
> Не совсем точно выразился. И у делегатов, и у слотов с сигналами суть
> одна - как вызвать метод известной сигнатуры у объекта, класс которого
> при разработке вызывающей части кода неизвестен. А вот синтакс для Qt
> попроще ИМХО.
блин, сделали бы специальный тип в с++
указатель на метод класса.
чтобы он хранил не только указатель на метод но и указатель на класс.

то-то былоб здорово, то-то хорошо.
можно было бы вызывать по такому указателю класс, о котором совершенно
ничего не знаешь....
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067309
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Yet another cat wrote:
> Не совсем точно выразился. И у делегатов, и у слотов с сигналами суть
> одна - как вызвать метод известной сигнатуры у объекта, класс которого
> при разработке вызывающей части кода неизвестен. А вот синтакс для Qt
> попроще ИМХО.
блин, сделали бы специальный тип в с++
указатель на метод класса.
чтобы он хранил не только указатель на метод но и указатель на класс.

то-то былоб здорово, то-то хорошо.
можно было бы вызывать по такому указателю класс, о котором совершенно
ничего не знаешь....
Posted via ActualForum NNTP Server 1.2

Ну в Builder'е Borland и реализовала такое -- получился синтакисческий ужас!
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067517
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Yet another cat wrote:
> Не совсем точно выразился. И у делегатов, и у слотов с сигналами суть
> одна - как вызвать метод известной сигнатуры у объекта, класс которого
> при разработке вызывающей части кода неизвестен. А вот синтакс для Qt
> попроще ИМХО.
блин, сделали бы специальный тип в с++
указатель на метод класса.
чтобы он хранил не только указатель на метод но и указатель на класс.

то-то былоб здорово, то-то хорошо.
можно было бы вызывать по такому указателю класс, о котором совершенно
ничего не знаешь....
Posted via ActualForum NNTP Server 1.2

Функторы прекрасно решают эту проблему - инкапсулируешь указатель на класс в функторе и вперёт с песней. Через шаблоны всё великолепно рулится - не вижу никаких проблем.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067559
Shr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
можно было бы вызывать по такому указателю класс, о котором совершенно
ничего не знаешь....А что тогда полиморфизм делает? Насколько я помню, почти все паттерны проектирования завязаны именно на использование виртуальных методов абстрактных классов. А в delphi, java и C# (и наверняка еще в куче других объектных языков) есть еще и интерфейсы, которые подходят никак не хуже.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067913
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё интерфейсы есть в технологии COM и CORBA.
И если я ничего не путаю, то в Делфе интерфейс применяется именно в контексте COM.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33067960
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕщё интерфейсы есть в технологии COM и CORBA.
И если я ничего не путаю, то в Делфе интерфейс применяется именно в контексте COM.

И CORBA тоже
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068171
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну CORBA в Делфях дохлая. Сильно дохлая.

ЗЫ: интересно, быди-ли сердечные приступы в группе разработчиков CORBA после обнаружения соответствующего компонента на вкладке ActivX
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068356
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinНу CORBA в Делфях дохлая. Сильно дохлая.

ЗЫ: интересно, быди-ли сердечные приступы в группе разработчиков CORBA после обнаружения соответствующего компонента на вкладке ActivX

Простите?!
Никакая она не дохлая. Очень даже нормальная. )) Вы с ней работали в Delphi, а если работали, то сколько?

P.S. Может я что-то пропустил, но что там на вкладке ActiveX к CORBA относящегося? )))
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068368
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К-к-как что? Класс ты корбовский как создавал?

Я с ней мало работал. Но работал. Насколько я знаю борланд отказался от поддержики корбы. В пользу .NET и COM.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068572
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор alex_k
Yet another cat wrote:
> Не совсем точно выразился. И у делегатов, и у слотов с сигналами суть
> одна - как вызвать метод известной сигнатуры у объекта, класс которого
> при разработке вызывающей части кода неизвестен. А вот синтакс для Qt
> попроще ИМХО.
блин, сделали бы специальный тип в с++
указатель на метод класса.
чтобы он хранил не только указатель на метод но и указатель на класс.

то-то былоб здорово, то-то хорошо.
можно было бы вызывать по такому указателю класс, о котором совершенно
ничего не знаешь....
Posted via ActualForum NNTP Server 1.2

Функторы прекрасно решают эту проблему - инкапсулируешь указатель на класс в функторе и вперёт с песней. Через шаблоны всё великолепно рулится - не вижу никаких проблем.

Шаблоны - это статическое решение. Ты можешь шаблон класса инстанциировать в ходе выполнения программы в зависимости от логики выполнения? Не можешь. А слоты к сигналам подключаются динамически, схема взаимодействия может свободно подключаться в зависимости от логики приложения. Я согласен, что это не всегда нужно, но если уж понадобится, то понадобится.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068683
_рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068693
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another cat[quot Интегратор][quot alex_k]


Шаблоны - это статическое решение. Ты можешь шаблон класса инстанциировать в ходе выполнения программы в зависимости от логики выполнения? Не можешь. А слоты к сигналам подключаются динамически, схема взаимодействия может свободно подключаться в зависимости от логики приложения. Я согласен, что это не всегда нужно, но если уж понадобится, то понадобится.

Приведи пожалуйста реалистичный пример кода в котором по твоему мнению не разрулишь без самодостаточных указателей на методы класса.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068768
_рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Qt мне тоже нравится
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33068962
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор Yet another cat[quot Интегратор][quot alex_k]


Шаблоны - это статическое решение. Ты можешь шаблон класса инстанциировать в ходе выполнения программы в зависимости от логики выполнения? Не можешь. А слоты к сигналам подключаются динамически, схема взаимодействия может свободно подключаться в зависимости от логики приложения. Я согласен, что это не всегда нужно, но если уж понадобится, то понадобится.

Приведи пожалуйста реалистичный пример кода в котором по твоему мнению не разрулишь без самодостаточных указателей на методы класса.

Так кода или "не разрулишь"? ИМХО противоречие здесь. Если код есть, то все уже разрулено. А пример приводится легко. Это любое event-driven GUI API. Именно любое. Совершенно тривиальное действие. Пользователь кликнул мышкой по кнопке. Откуда разработчик кнопочки узнает, где и как разработчик приложения обработает нажатие? А откуда он узнает, какие данные надо передать вместе с сообщением о клике? Вот и начинается всякая фигня. Виртуальные методы? Не подходит, на каждый чих подкласс что ли делать? А если я хочу событие в родительской форме обработать? Карты событий как в MFC? Уже ближе. Жизнеспособное решение, но со своей ценой: статическая типизация теряется. Все, что ты хочешь из нестандартного вместе с кликом передать придется передавать как void* Все ошибки на твоей совести. Шаблоны? Тоже подходит, но та же проблема, что из картами событий. Попробуй что-нибудь нестандартное передать обработчику. Тут либо на каждую такую фигню шаблон писать (тебе не надоест ли?), либо, как это в libsig сделано, определить стандартные функторы, в которых все сопутствующее опять же как void* идет. Естественно, в последнем случае никакой статической типизации нет. То что в Qt представляется оптимальным решением. И слот и сигнал объявляются как методы класса, соответственно, большинство ошибок с типами ловятся компилятором. Ну ты можешь, конечно, приведением типов себе жизнь испортить, но это только твои проблемы. Выбор сигнатуры для слотов и сигналов - на твое усмотрение, соответственно, никаких проблем с динамической памятью для дополнительных параметров. Требование только одно: сигнатуры сигнала и подключаемого к нему слота должны совпадать. Если попытаешься подключить слот несовместимой сигнатуры, то получишь exception. Разумеется, это не статический контроль, но зато вполне единообразный, об этом механизме при разработке думать не придется.

ЗЫ. Прошу понять, я не пытаюсь сказать, что это единственный подход, но лично для меня, это самый удобный подход. Вам не нравится? Great, у нас демократия
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069047
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another cat[quot Интегратор][quot Yet another cat][quot Интегратор][quot alex_k]

ЗЫ. Прошу понять, я не пытаюсь сказать, что это единственный подход, но лично для меня, это самый удобный подход. Вам не нравится? Great, у нас демократия

boost::signal :)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069257
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор Yet another cat[quot Интегратор][quot Yet another cat][quot Интегратор][quot alex_k]

ЗЫ. Прошу понять, я не пытаюсь сказать, что это единственный подход, но лично для меня, это самый удобный подход. Вам не нравится? Great, у нас демократия

boost::signal :)

Не канает. Вот у меня диалоговое окно с полями ввода и кнопка на нем. Где мне логичне всего обработать ввод нажатие этой кнопки? Как правило, в методе подкласса соответствующему этому диалогу. хотя варианты возможны. И как мне вызвать этот метод? Лепить функтор, который знает о существовании моего класса окна и метода в нем? Это хорошо только для OK и Cancel. Там вообще можно сделать стандартный функтор, вызывающий виртуальный метод в базовом классе диалога, а в подклассах его перекрывать. Но ведь встречаются кнопки другого назначения, правильно? И на каждую по функтору, так что ли получается. А соединить напрямую сигнал кнопки и слот окна boost::signal уже не позволит. Вот и остается только захламлять проект сущностями, совершенно не нужными для понимания сути кода.

Обрати также также внимание, на предыдущий пост (через один). Ты можешь инстанциировать шаблон только статически, на стадии компиляции. Если твое приложение при модульной структуре получило ссылку на объект и ты знаешь, что класс объекта определяет слот с неким именем, которое также тебе передано. Классичесская ситуация Service Discovery. И что мне тут могут предложить шаблоны вообще и boost::signal в частности? А ничего. Хоть из штанов выпрыгни, а если указателя на метод нет и есть только имя, ты его не вызовешь. Можно, конечно, написать надстройку для организации позднего связывания. И получится у тебя как раз QObject из Qt.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069531
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another cat[quot Интегратор][quot Yet another cat][quot Интегратор][quot Yet another cat][quot Интегратор][quot alex_k]

Не канает. Вот у меня диалоговое окно с полями ввода и кнопка на нем. Где мне логичне всего обработать ввод нажатие этой кнопки? Как правило, в методе подкласса соответствующему этому диалогу. хотя варианты возможны. И как мне вызвать этот метод? Лепить функтор, который знает о существовании моего класса окна и метода в нем? Это хорошо только для OK и Cancel. Там вообще можно сделать стандартный функтор, вызывающий виртуальный метод в базовом классе диалога, а в подклассах его перекрывать. Но ведь встречаются кнопки другого назначения, правильно? И на каждую по функтору, так что ли получается. А соединить напрямую сигнал кнопки и слот окна boost::signal уже не позволит. Вот и остается только захламлять проект сущностями, совершенно не нужными для понимания сути кода.


Не понимаю проблему -
если например хотими вызвать void YourDialog::OnYourSuperHandler(int nVal)
f <- boost::functuion2(&YourDialog::OnYourSuperHandler) - делаем функтор и уз указателя на класс ()
g <- boost::bind1st(f, this) - биндим первый параметр

g(nVal) - вполне самомтоятельный объект. Идея думаю ясна - остальное детали


Yet another cat
Обрати также также внимание, на предыдущий пост (через один). Ты можешь инстанциировать шаблон только статически, на стадии компиляции. Если твое приложение при модульной структуре получило ссылку на объект и ты знаешь, что класс объекта определяет слот с неким именем, которое также тебе передано. Классичесская ситуация Service Discovery. И что мне тут могут предложить шаблоны вообще и boost::signal в частности? А ничего. Хоть из штанов выпрыгни, а если указателя на метод нет и есть только имя, ты его не вызовешь. Можно, конечно, написать надстройку для организации позднего связывания. И получится у тебя как раз QObject из Qt.

Что понимается под модульной структурой ? Имхо, если кривая организация архитектуры то ничего не поможет, но я не понимаю зачем может понадобится вызывать методы по строковому имени - кроме конкретного ухудшения производительности больше ничего не вижу :) Почему бы не делать этот класс-обработчик сообщений реализующим некоторые интефрейсы например...
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069684
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно не понимаешь. Породил две лишних с точки зрения проекта сущности - функтор и биндинг и рад по уши. Аналог на Qt выглядит лучше, работает не хуже.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class MyDialog : public QDialog
{
Q_OBJECT

private slots:
    void MyHandler();

public:
    MyDialog(QWidget *parent): QDialog(parent, bla-bla)
    {
          QPushButton *button=new QPushButton("Caption", this);

          this->connect(button, SIGNAL(clicked()), SLOT(MyHandler()));
    }
};

ЗЫ. Специально для любителя мелких подковырок: delete для button я не забыл, он мне нафиг не нужен, диалог свои подчиненные виджеты сам прибьет, когда нужно.

Что касается вызовов по имени, то сразу видно, что ты скриптуемых приложений никогда не писал. Может, не нужно было, не вопрос. Просто Qt хорошо подходит не только для написания собственно скриптуемых приложений, но и является библиотекой, которую можно использовать в скриптовых языках. В отличие от той же WTL, которая не только библиотека для одной платформы, но и для одного языка программирования.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069705
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c++
Q_OBJECT

private slots:
void MyHandler();

это компилируется любым с++ совместимым компилятором?
первый раз слашу про такие ключевые слова как private и slots.
или я могу написать что угодно в классе типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class aaa
{
  socket port:
   void connect();
  fuking chord:
   void disconnect();
};
или я вообще конкретно погнал?
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33069775
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex_k:

Это компилируется любым компилятором. Все лишние слова (например, slots) - макросы-пустышки. Они имеют значение только для moc (Meta-object compiler), который поставляется вместе с Qt. Все, что тебе нужно, так только пройтись moc'ом по хидерам и включить сгенерированные им файлы в проект. И то только, если являешься любителем make-файлов, для основных IDE поставляются плагины, делающие процесс прозрачным для тебя. В этом и суть, что само по себе ничего не бывает, но работая с Qt думать об этом не нужно.
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33070068
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yet another catКонечно не понимаешь. Породил две лишних с точки зрения проекта сущности - функтор и биндинг и рад по уши. Аналог на Qt выглядит лучше, работает не хуже.


То что лично ты не привык к функторам является оффтопом ;).

Yet another cat
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class MyDialog : public QDialog
{
Q_OBJECT

private slots:
    void MyHandler();

public:
    MyDialog(QWidget *parent): QDialog(parent, bla-bla)
    {
          QPushButton *button=new QPushButton("Caption", this);

          this->connect(button, SIGNAL(clicked()), SLOT(MyHandler()));
    }
};


[quot Yet another cat]
Что касается вызовов по имени, то сразу видно, что ты скриптуемых приложений никогда не писал. Может, не нужно было, не вопрос.

Не делай скоропостижных выводов, я в них постоянно работаю в некотором смысле - если хочется обсудить этот вопрос - открывай отдельную тему.

По теме:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class MyDialog : public QDialog
{
Q_OBJECT

private slots:
    void MyHandler();

public:
    MyDialog(QWidget *parent): QDialog(parent, bla-bla)
    {
   // .......
          this->connect(button, SIGNAL(clicked()), SLOT(MyHandler()));
    }
};
Yet another cat

Замесательно - как ты будешь коннектить слот MyHandler, если он находится в другом классе ?

Если уж на то пошло давайте разбираться во что раскрвываются макросы SIGNAL и SLOT... И потом я не вижу красоту этой синтаксической конструкции от того же boost::signal + function+bind :)

Просто Qt хорошо подходит не только для написания собственно скриптуемых приложений, но и является библиотекой, которую можно использовать в скриптовых языках. В отличие от той же WTL, которая не только библиотека для одной платформы, но и для одного языка программирования.

Всё в кучу свалил - и в КАКОМ ИМЕННО скриптовом языке и КАК ты будешь использовать QT ?

PS Предлагаю говорить предметнее и конкретнее ;)
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33070076
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
c++
Q_OBJECT

private slots:
void MyHandler();

это компилируется любым с++ совместимым компилятором?
первый раз слашу про такие ключевые слова как private и slots.
или я могу написать что угодно в классе типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class aaa
{
  socket port:
   void connect();
  fuking chord:
   void disconnect();
};
или я вообще конкретно погнал?
Posted via ActualForum NNTP Server 1.2

просто Yet another cat немного иделализирует некоторые вещи
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33072124
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kуказатель на метод класса.
чтобы он хранил не только указатель на метод но и указатель на класс.
Гляжу в небо и думаю, какая хорошая штука дельфа :)

Ну в Builder'е Borland и реализовала такое -- получился синтакисческий ужас!
Объективно говоря, все C-подобные языки есть синтаксический ужас, ничего с этим не сделаешь.

Любовно вспоминаю в очередной раз warning, который лет десять назад выдал мне компилятор Watcom C. Звучал он примерно так: "написанная Вами конструкция согласно синтаксису языка C может быть понята несколькими способами: так (строка с расставленными дополнительными скобками) либо так (строка с другим вариантом дополнительных скобок). Я выбираю первый вариант; если Вы имели в виду второй, поставьте дополнительные скобки".

И главное все было просто - массив указателей на функции, получающих параметром массив еще чего-то..
...
Рейтинг: 0 / 0
Тащусь от 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
Тащусь от Qt
    #33076478
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интеграторвот один из возможных вариантов
Хм. Понятно :) Комментарии:

1) Если честно, я бы не назвал это решение "Через функторы это разруливается естественным способом" (c) Конструирование прокси-объекта - прием нормальный, но "естественным" я бы назвал решение именно через функтор как таковой, решение, опирающееся на идею функтора. Здесь функтор играет сугубо вспомогательную роль; любая сущность, которая умеет вызвать функцию по указателю, но не является функтором, справится ничуть не хуже.

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

2) Далее - придирка к самому "естественно". Я соглашусь, что решение выполнено аккуратно, и - не готов обсуждать, но не удивлюсь, если для конкретной реализации компилятора C++ оно имеет весомые преимущества. Но вариант с inner объектами - все внутри одного класса - мне представляется именно что "естественным" для решения задачи "несколько внутри одного", нежели поддержка вспомогательного списка вспомогательных объектов, "обманывающих" кнопку.
...
Рейтинг: 0 / 0
Тащусь от Qt
    #33076590
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Интеграторвот один из возможных вариантов
Хм. Понятно :) Комментарии:

1) Если честно, я бы не назвал это решение "Через функторы это разруливается естественным способом" (c) Конструирование прокси-объекта - прием нормальный, но "естественным" я бы назвал решение именно через функтор как таковой, решение, опирающееся на идею функтора. Здесь функтор играет сугубо вспомогательную роль; любая сущность, которая умеет вызвать функцию по указателю, но не является функтором, справится ничуть не хуже.

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

2) Далее - придирка к самому "естественно". Я соглашусь, что решение выполнено аккуратно, и - не готов обсуждать, но не удивлюсь, если для конкретной реализации компилятора C++ оно имеет весомые преимущества. Но вариант с inner объектами - все внутри одного класса - мне представляется именно что "естественным" для решения задачи "несколько внутри одного", нежели поддержка вспомогательного списка вспомогательных объектов, "обманывающих" кнопку.

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

Код: 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.
class Button  {
public:
  typedef Loki::Functor<void, TYPELIST_1(const char*)>  ListenerType;

  void fireOnClick(const char* szMsg) {
       if (listener_) listener_(szMsg);
  }

   void setListener(const ListenerType& listener) {
       listener_ = listener;
   }

protected:
  ListenerType listener_;
};


void onClick1(const char* szMsg) {
	std::cout << szMsg << std::endl;
}

class BigClass {
   Button btn1_, btn2_, btn3_;
public:
 void onClick2(const char* szMsg) {
	std::cout << szMsg << std::endl;
 }

 void onClick3(const char* szMsg) {
	std::cout << szMsg << std::endl;
 }

 void run() {
    btn1_.setListener(Button::ListenerType(onClick1));
    btn2_.setListener(Button::ListenerType(this, onClick2));
    btn3_.setListener(Button::ListenerType(this, onClick3));

    btn1_.fireOnClick("button 1");
    btn2_.fireOnClick("button 2");
    btn3_.fireOnClick("button 3");

 }

};

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

Давайте забудем, что в яву вроде как добавляют шаблоны. Чем этот код принципиально отличается от

Код: plaintext
1.
2.
btn1.setListener ( new  ButtonListener() {
   public  btnClick() { OnClick1() }});
?

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


Честно говоря не понимаю в чём вы видите проблему. Приведите пожалуйста соответвующий код, причём наставиваю на С++ - в Java есть свои фичи и вести разговор по-моему конструктивнее если конкретиризоваться на одном синтаксисе ;)


Давайте забудем, что в яву вроде как добавляют шаблоны. Чем этот код принципиально отличается от

Код: plaintext
1.
2.
btn1.setListener ( new  ButtonListener() {
   public  btnClick() { OnClick1() }});
?

Лично я - считаю такое плохим тоном, но объективности ради - делается.

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

Почему вас не смущает код


void func(int nVal) {
// ...
}

int main() {
void (*fn)(int);
fn = func;
// ....
}

и смущает что создаются какие-то дополнительные объекты если вместо указателя на функию применяются функторы ?

Может стоит посмотреть на функуторы просто как на продвинутые указатели ;) ?

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


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