![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
Мне нужно реализовать события, как в Дельфи или С++ Builder, на Visual C++. Но стандартный С++ не поддерживает указатели на функции-члены класса. В своём блоге http://c3plus.ru за 02.11.10, я попытался расписать, как это можно было бы реализовать, но получилось уж слишком громоздко... А как сделать проще?
|
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
чего??? boost::signals
Может сперва стоит как следует изучить возможности языка, а потом писать блог? Пиши для себя сколько угодно, ради бога, только не надо это публиковать и других с толку сбивать. В C++ ЕСТЬ! указатели на функции-члены, поищи в google. Это сообщение отредактировал(а) azesmcar - 2.11.2010, 09:10 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
sofenru, читаю Ваш блог, и посещает меня, уже забытое чуство стыда. Это психологический эксперимент на сопереживание?
Это сообщение отредактировал(а) Леопольд - 2.11.2010, 12:48 -------------------- вопросов больше чем ответов |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Сигналы это уже тяжелая артиллерия. Можно чуть более просто
boost::function - описываем тип-шаблон события. boost::bind - шаблонная функция для связывания Вот пример связывания объектного обработчика с событием
результат bind будет объект типа boost::function<> ; Безусловно этот способ не очень красивый и прозрачный, но использовать можно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| sofenru |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
Ну так... не поддерживается... ))) Иначе, зачем тогда всё это реализовывать с помощью библиотеки boost??? Так как я пишу свою библиотеку, то завязывание на чужие либы (будь то буст или другая) никак не приемлемо... Я всем представляю либу, которая будет весить едва ли метр, но для её работы необходимо скачать несколько различных других библиотек на десятки или сотни килобайтов)))
Поясните, плиз, подробнее.. что я перепутал в этот раз?
думаю, что нет.... в такой форме намного веселее писать сложные программы... тем более, что мой проект просто обречён на успех!!! |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
опять...каким образом связаны сигналы и указатели на функцию-член? ты хоть по ссылке зашел в google? почитал? ну ну..желаю удачи в разработке сотни тысяч велосипедов. поверь мне, кроме тебя твоя либа никому не нужна, а boost сегодня есть практически у каждого C++ программиста. |
|||
|
||||
| Master01 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 22.8.2007 Репутация: 2 Всего: 2 |
ну вес либы не принципиален |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Для того чтобы упростить синтаксис и избежать написания повторяющегося кода. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
тов. sofenru мне очень напоминает спам-бота и рекламщика и клоуна в одном лице.
читаю тему, и не знаю, смеяться или плакать... Добавлено @ 15:09
куда Бьярне смотрел? Это сообщение отредактировал(а) boostcoder - 2.11.2010, 15:10 |
|||
|
||||
| sofenru |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
искал - нету.... ну тогда дайте пример!
не люблю спам, но могу двигать сайты в инете даже не сумневайся... всё-таки, данный проект ближе к серьёзному... я действительно хочу написать либу и писать на ней проги... думаю, у меня это получиться... Это сообщение отредактировал(а) sofenru - 2.11.2010, 15:27 |
||||||
|
|||||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
По первой же ссылке в google.
|
||||
|
|||||
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
azesmcar, спасибо, но НАВЕРНОЕ (хотя тут с вами не в чём не уверен
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
sofenru, std::function и std::bind уже в стандарте, даже в микрософт компиляторе
а вы просто не понимаете о чем говорите Это сообщение отредактировал(а) boostcoder - 2.11.2010, 16:46 |
|||
|
||||
| sofenru |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
ну да... мне нужны closure
скоро либа заработает и уже станет не совсем смешно... я предлагаю скромное компромиссное решение - ввести на винграде следующие топики: C/C++/С+++: Для новичков C/C++/С+++: Общие вопросы C/C++/С+++: Программирование под Unix/Linux ... и т.д |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
слишком много букв.. лень читать билдероподобный код... вот Вам для разминки http://liveworkspace.org/code/287fc928cb9a...f4a88e24056794b
Это сообщение отредактировал(а) mes - 2.11.2010, 16:58 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
точно сказано все будут плакать от того "как" она написана |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 2.11.2010, 17:03 |
|||
|
||||
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
mes,
Выдаёт ошибку "function : is not a member of std" вот в этой строчке: std::function<void(btn*)> on_click; |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так может указать где выдает ? если на Вашем компиляторе, то полагаю что он у Вас староват для таких буст поможет.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
по приведенной ссылке, все работает. у вас наверное компилятор не "обычный" сейчас начнется срач |
|||
|
||||
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
boostcoder, я согласен, что boost очень хорошая и продвинутая библиотека и хорошо, что её включили в визуал 10! Но я не готов её использовать в данный момент... Ну вот нужно сделать без неё, тем более здесь пишут, что это очень просто... )
Добавлено через 1 минуту и 21 секунду mes, у меня стоит Microsoft Visual 2008 ... ставить 2010 или boost? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это было бы действительно хорошо, будь это правдой |
|||
|
||||
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
sofenru, вот велосипедно, для сравнения, в том стиле, что просили :
http://liveworkspace.org/code/d9f8501d0320...e817d2869b7dece П.С. грязь из за спешки Добавлено через 6 минут и 22 секунды
хм.. смотря что хотите ну а в принципе, если хотите не тратиться на велосипеды и быстрей выпустить свою либу Добавлено через 13 минут и 17 секунд вспомнил, есть еще мальнькая библиотечка (поиск по словам winnie closure) может помочь решить мелкие вопросики и возможно утолить любопытство.. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
У меня boost нормально работает с Microsoft Visual 2005. Так что не нужно ни каких особых версий. Кстати выше речь шла о том что function<> добавили в STL. В 2010 студии и нет необходимости для этого подключать буст. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
<functional> это же библиотека STL . Раз они добавили в нее std::function<>, то нет необходимости использовать boost::function<> .
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
что значит не то, это указатель на member функцию, а что ты под этим подразумевал я не знаю но ты забыл очень важную вещь. Эта функция не просто функция, это функция - член класса и вызывается она не просто так а для конкретного объекта. Для какого объекта она должна вызываться? sofenru не изобретай велосипеды, здесь уже чуть ли не все посетители раздела тебе сказали, что ты ерундой занимаешься. Займись чем нибудь полезным. Я думаю на данном этапе для тебя самым полезным будет более детальное изучение языка. Почитай лучше несколько умных книг вместо копирования классов из Дельфи. включить его (кстати далеко не весь) хотели в новый стандарт и включили кстати, просто стандарт пока не вышел и компиляторы его поддерживают частично. В VS2010 кое-что есть, но gcc 4.5.1 на порядок опережает по части экспериментальной поддержки нового стандарта.
не мелочись, чего уж там..а тебя давай сразу в администраторы. Как раз тут у нас представитель администрации, на месте и коронуют. Это сообщение отредактировал(а) azesmcar - 2.11.2010, 20:10 |
||||
|
|||||
| sofenru |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
Ага спасибо... сделал на ней... причём автор утверждает, что его способ это "что-то типа boost::function, но без использования динамической памяти" ... то есть, как я понимаю, даже намного круче!!! а вот, что он пишет про boost::functional
уже выложил версию 0.3 - можно выводить простейшие окошки... скоро уже буду элементики накидывать ) Это сообщение отредактировал(а) sofenru - 3.11.2010, 18:50 |
||||||
|
|||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ну что тут скажешь... аффтар явно недорос до буста(как и ты) на самом деле, таким людям, не нужно ничего объяснять. такие тоже нужны...все знают для чего уже страшно ты случаем свою ОСь и аналог фотошопа не писал раньше? кого-то ты очень напоминаешь Добавлено через 6 минут и 32 секунды
кстати. я полагаю, ты не тупое стадное быдла ищущее смысл в быдловизоре, и посему к тебе вопрос: из слов "того" аффтара о boost::function, ты понял, что это не хорошо, и сформировал для сепя позицию. так вот, пожалуйста, объясни, чем плохо динамическое выделение памяти, и почему(как) происходит фрагментация кучи? а так же, приведи доказательство того, что boost::function выделяет динамическую память. спасибо. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну да а велосипед круче автомибиля, так как нет двигателя .. Я понимаю, конечно, экономия, экология.. но педали терь крутить вручную вножную.. Добавлено через 7 минут и 10 секунд напомнило один детский рассказ :
вобщем выбирайте кому должно быть больно: Вам, или компилятору с осью.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
мне это напомнило поговорку, которой я(будучи скептиком и циником) руководствуюсь:
это по поводу того, что кто-то что-то сказал, и где-то что-то написано. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Для чего там динамическая память? Это же шаблоны. Тут все известно на этапе компиляции. И число параметров и их тип. Такие вещи в С++ реализуются без кучи. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| sofenru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.10.2010 Репутация: нет Всего: нет |
Зачем все эти бесконечные споры?
Я признаю, что я слабовато знаю С++. Просто у меня такая специфика работы, то плюсы, то ява, то пхп (и весь это набор хтмл, цсс, яваскрипт и т.д. и т.п...), то асутп (тут свой набор языков) и т.д... Это всё невозможно знать досканально!!! Что-то лучше, что-то хуже, но, конечно, далеко до профи. Хотя и этого, в принципе, хватает.... Теперь я решил сосредоточиться только на С++ (ну ещё посматриваю в сторону явы, но пока только С++). Я совсем слабовато знаю STL и совсем не знаю BOOST. Так что кидайте сюда ссылки по этим либам для чайникофф На счёт своей библиотеки c3plus. Конечно же буду продолжать этот проектик! Думаю к новому году выйдет релиз!!! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
к function можно подключить любой бинд в рантайме, а значит хранит содержимое по указателю, т.е.в дин. памяти.. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Хотя да, приемник то универсальный. С другой стороны это никак не влияет на скорость запуска обработчика (invoke), а ведь это и есть самый главный параметр. Вот кстати результаты тестов http://www.codeproject.com/KB/cpp/fastdelegate2.aspx . В большинстве случаев назначение обработчика не является действием критичным по времени. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
оффтопик, извиняйте - не удержался...
object.cpp:383
Это сообщение отредактировал(а) rudvil - 5.11.2010, 00:42 --------------------
xor |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вопрос то в чем? код откуда? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
boostcoder, 1111е сообщение Это сообщение отредактировал(а) mes - 5.11.2010, 00:47 |
|||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
из этой библиотеки версии 0.3 =] в файле object.cpp:383 магические цифры, магическая переменная "a" Это сообщение отредактировал(а) rudvil - 5.11.2010, 00:51 --------------------
xor |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
уря! наверное ТС со мной не согласится(что скорее всего), ибо не понимает что пишешь просто кал Добавлено @ 00:58 он напишет лучше. Это сообщение отредактировал(а) boostcoder - 5.11.2010, 01:23 |
|||
|
||||
| Sahab |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
зря вы так
без него скучнее)) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Ну прям вы придираетесь. Может это место для установки брейка. Я сам такое часто делаю. Может он тесты производительности делал на больших списках. Типа сколько времени займет поиск элемента. Пускай пишет. Зато больше узнает как это все устроено изнутри. На самом деле код системных библиотек С++ просто отвратительный для чтения/изучения. Безусловно авторы стремились добиться максимум производительности и экономии памяти, но такой код не годиться для изучения как пример того "как нужно правильно писать код". -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |