2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|||||||||||
1 | |||||||||||
Перевести на стандартный С++03.06.2015, 13:19. Показов 1734. Ответов 26
Метки нет (Все метки)
Добавлено через 48 минут приделал стандартный костыль из DOS-эпохи:
0
|
03.06.2015, 13:19 | |
Ответы с готовыми решениями:
26
Перевести фиолетовый (105, 62, 151) из RGB в HSB, уменьшить яркость в 2 раза и перевести обратно Не стандартный xml Не стандартный 2d массив Стандартный конвейер |
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
03.06.2015, 13:36 | 2 |
1) std::function, std::bind?
2) Али boost::signals, али что-то подобное из других библиотек? 3) Али ваш "костыль"(который таки не костыль , а минимальная реализация), али ваш "костыль" расширенный в свой велосипед, копирующий поведение (1) или (2) пунктов.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
03.06.2015, 13:45 [ТС] | 3 | |||||
Ну вопрос собственно не в раздаче многим получателям, что тривиально, а вот в таком:
0
|
шКодер самоучка
|
||||||
03.06.2015, 13:48 | 4 | |||||
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
03.06.2015, 14:14 [ТС] | 5 | |||||
А костыль он потому что позволяет перепутать связку объект->метод при назначении.
Добавлено через 9 минут поскольку присутствуют задержки в передаче сигналов (имеется в виду OnDelay и OffDelay от изменения состояния входа, повязанные на внешний таймер) при всем богатстве выбора другой альтернативы нет как велосипедить, да и велосипед проще получается чем если велосипедить оборачивая std или boost. Добавлено через 8 минут Та не это не то. надо не функции класса, а функции экземпляра подвязывать, в том числе виртуальные. т.е. внутря __closure аналогичны
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
03.06.2015, 14:19 | 6 | |||||
Ну, тогда можно и так перепутать:
В бусте хороший оверхед присутствует, ибо он как раз предоставляет возможность , предоставляет инструмент слежения за подписчиками. А вот стл - это просто синтаксическая плюшка, с нулевым оверхедом, делающая в конце концов ровно тоже, что и ваш "костыль", и так же требуещее от вас следить за всем. Cra3y, Собственно привёл пример современного обработчика от стл. Добавлено через 2 минуты В стандартной реализации стл за этим следит std::bind(<function>, <object>) возвращающий соответствующий функтор.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
03.06.2015, 14:29 [ТС] | 7 |
Ну как минимум не даст одному Code сунуть Data от другого который вообще из другой иерархии ветки приемников. На крайняк в сеттере можно проверить чтобы Data была одна и та же у обоих обработчиков, что кстати тоже может быть не всегда нужно, особенно если придется (пока до такого изврата еще не дошло) привязывать на on и off разные вложенные классы одного получателя.
Добавлено через 5 минут Та тут как раз не в оверхеде дело, а скажем в том чтобы к примеру закрытие двери началось после OffDelay секунд после того как выключится входной сенсор присутствия (нажатия на половицу).
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
03.06.2015, 14:36 | 8 |
Если у них один тип, то конечно даст, и от этого ни как не защититься.
Если разные, то практически ни одна реализация не даст такого сделать. В общем, я не понимю этой строчки Но коли у вас всё так серьёзно, может это и не просто обработчик какой-то? И самое время взглянуть вот сюда: https://ru.wikipedia.org/wiki/... 0%B8%D1%8F Добавлено через 2 минуты Ну если вы пишете такую клёвую штуку, то точно, стоит сначала обдумать архитектуру как следует, не надёясь на __closure.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
03.06.2015, 14:38 [ТС] | 9 |
Та отож. Собственно тот геморрой о котором лет 20 назад забыли с появлением __closure.
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
03.06.2015, 14:38 | 10 |
И касательно обработчиков, я вам советую посмотреть либо в сторону буста, либо написать свой велосипед с контролем времени жизни подписчика. Иначе будет очень туго.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
03.06.2015, 15:38 [ТС] | 11 | |||||
Та нет, таки стоит скинуть ту часть в которой обязаловка MSVC (именно потому и не подходит __closure и остальные прелести bcc), и делать дальнейшее развитие уже с использованием всех языковых средств bcc.
Добавлено через 2 минуты Он уже есть. И не только времени но и активности (подвязка на источник таймера в состоянии ожидания и т.п./отвязка после передачи сигнала и т.п.). Добавлено через 24 минуты А архитектура простая как гвоздь. Сенсор-триггер-подписчик. При этом триггер порожден от подписчика. Подписчик помнит всех к кому подписался, и из деструктора уведомляет. Ну а учитывая что к примеру дверь из модели никуда не денется, только с самой моделью... то уведомляет на всякий случай. деться могут активаторы поэтому и вынесены отдельно и дергают сенсоры по Id в общем списке, который берут из карты. Вобщем получается набор из которого делается любое каскадирование сигнала. При этом все просто как божий день. За исключением неумения std::vector найти или удалить элемент по значению элемента (быстрее дописать соответствующий метод чем в хелпе найти что его нет). Добавлено через 30 минут TTrigerProc Foo=Bar.On; компилятор засунет в Foo.Data Bar, а в Foo.Code то что у Bar в VMT соответсвует On. т.е. к примеру
0
|
25.06.2015, 17:17 | 12 | |||||
1
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
01.07.2015, 16:57 [ТС] | 13 | |||||
Qt:
0
|
01.07.2015, 17:06 | 14 |
Ну Builder вероятно не работает по тому что лямбды не поддерживает поэтому лучше без лямбд boost::function+boost::bind.
В MSVC хз чего не работает, вероятно лямбда не правильно записана, я их не применяю поэтому ничего не могу сказать.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
01.07.2015, 17:30 [ТС] | 15 |
Билдер тоже не может шаблон сгенерировать. ему похоже __closure лямбда приснилась и он ее в шаблон вместо void* где то пихает.
Добавлено через 2 минуты Причем сегодня с утра под билдером подобная конструкция работала. Правда через пень колоду. Приходилось для каждого вызова свежую лямбду делать, а при передаче запомненной вылетал на третьем вызове, потому и убрал. Добавлено через 9 минут Да еще такой вопрос. А NULL вместо нее передать можно как вместо __closure а потом перед вызовом на этот NULL проверить?
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
01.07.2015, 17:46 [ТС] | 17 | |||||
подправил запись лямбды, Builder прожевал и прекрасно работает.
0
|
01.07.2015, 17:51 | 18 |
Добавлено через 54 секунды А Qt тут при чем.... если компилятор MSVC2012. Но я чет сомневаюсь что причина в компиляторе, скорее где-то в коде накосячил.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
||||||
02.07.2015, 08:07 [ТС] | 19 | |||||
Ну билдер его же как то компилирует. clang который.
Добавлено через 11 минут Причем что самое интересное вызовов подобных в коде 6 а ошибок по этому поводу 4 Добавлено через 6 часов 20 минут Не по теме: Ну под x86 билдер хоть как то компилит. а Qt вообще говорит - иди лесом ищи компилятор который not found хотя в списке компиляторов есть (MSVC++ 12 (x86)) Добавлено через 7 часов 35 минут
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
02.07.2015, 09:43 | 20 | |||||
у мну так:
по смыслу действия это похоже на boost::signals но в отличие от него, не требуется сохранять коннекшены. не требуется выполнять никаких явных действий по подписке/отписке. код не загромождается само-собой разумеющимися деталями. (на самом деле существует возможность явно подписаться/отписаться/указать метод. но как я и ожидал, на практике они оказались невостребованными)
0
|
02.07.2015, 09:43 | |
02.07.2015, 09:43 | |
Помогаю со студенческими работами здесь
20
Стандартный калькулятор Стандартный джойстик Не стандартный ЧПУ Стандартный Поиск Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |