Войти
ПрограммированиеФорумОбщее

Указатели на функции-члены классов (комментарии) (16 стр)

Страницы: 112 13 14 15 16 17 Следующая »
#225
23:31, 17 апр. 2013

Kartonagnick
> По твоим словам, получается, что делегат робота можно настроить на любую
> функцию, удовлетворяющую протоколу делегата.
именно.
Kartonagnick
> То есть, ты считаешь, что без разницы что именно делают эти функции, и что они
> возвращают, главное - что бы удовлетворяли протоколу делегата.
именно.
Делегаты для этого и существуют. Тот кто вызывает делегат, ни должен ничего знать про реализацию в нём.
Kartonagnick
> Ты походу сам не врубаешься для чего нужны делегаты.
XD да нет, похоже это ты не врубаешься.
Вот смотри, когда ты пишешь обработчик события OnClick для кнопки, разве кнопка должна знать что ты там должен записать? нет. она всеголишь вызывает этот делегат, а внутри ты хоть системный диск форматируй.
Kartonagnick
> Как ты будешь выбирать какой именно метод земли подойдет для робота?
какой захочу такой и выберу. Повторяюсь роботу должно быть пофиг что вызывает делегат, его должно интересовать только соблюдение сигнатуры, чтобы он мог спокойно отправить в делегат данные и забыть о них.
Kartonagnick
> Каким образом протокол делегата освобождает тебя от проблемы выбора одного из
> многих методов земли?
он освобождает не от выбора, а от мыслей "что робот хочет от этого делегата"
Kartonagnick
> Он не поможет тебе правильно установить связи между компонентами.
XD да почему нет? как раз поможет, сигнатура совпадает в любом случае (иначе ошибка при компиляции) а соответственно нужно всего лишь проверить на 0 и произвести вызов.
Kartonagnick
> На чем ты основывался выбирая из двух методов, если она они удовлетворяют
> протоколу делегата робота.
>
я оновываюсь на том что мне нужно в данный момент, если мне нужно чтобы робот вызывал GetData1 я подставлю GetData1 если GetData2 то подставлю GetData2, не робот решает что нужно подставить а я сам.


#226
23:35, 17 апр. 2013

Kartonagnick
> Теперь, надеюсь, до тебя дошло, что не сигнатура играет роль, а имя-типа,
> который определяет смысловую нагрузку сообщения?
facepalm. мда...
допустим это так (хотя это не так), но даже при этом твой делегат в 100 раз хуже шаблонного.
ибо.
void setHandler(const Den::TConnector<int()>& handler); // тут мы знаем что привязываемый метод к делегату должен вернуть int
void setHandler(const Den::Connector& handler); // а тут мы вообще не знаем что  привязываемый метод  должен вернуть.

#227
23:37, 17 апр. 2013

Kartonagnick
если ты ещё не понял что такое делегат, то объясняю. Делегат это высокоуровневая обёртка над callback

#228
23:43, 17 апр. 2013

Chaos_Optima
> я оновываюсь на том что мне нужно в данный момент, если мне нужно чтобы робот
> вызывал GetData1 я подставлю GetData1 если GetData2 то подставлю GetData2, не
> робот решает что нужно подставить а я сам.
>


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

#229
23:44, 17 апр. 2013

Chaos_Optima
> если ты ещё не понял что такое делегат, то объясняю. Делегат это
> высокоуровневая обёртка над callback


Объясни какой конкретно делегат ты скормишь роботу. Понятливый ты наш

#230
23:48, 17 апр. 2013

Chaos_Optima
> void setHandler(const Den::TConnector<int()>& handler); // тут мы знаем что
> привязываемый метод к делегату должен вернуть int
> void setHandler(const Den::Connector& handler); // а тут мы вообще не знаем
> что  привязываемый метод  должен вернуть.

Само по себе знание о том, что вернется какой то инт бесполезно. Если что то пойдет через жепь, придется ещё познать, какую смысловую нагрузку несет этот инт, и какие значение по нему приходят. А так же откуда они приходят, и какую смысловую нагрузку вкладывал поставщик. Которого предварительно ещё придется найти.

А знание голого протокола делегата здесь - вообще ни о чем.

И да, кстати, у меня есть возможность использовать по потребности тот, или иной. У тебя такой возможности нет. На задачках типа ALX`совой, твой коннектор вопрется так же, как вперся std::function

Моему вода с гуся.

#231
23:51, 17 апр. 2013

Kartonagnick
> На задачках типа ALX`совой
Его задача была решена давно-давно, совершенно другими людьми.
Если кому лень изучать то решение - ничем не могу помочь.

#232
23:58, 17 апр. 2013

Grey304
> Его задача была решена давно-давно, совершенно другими людьми.
> Если кому лень изучать то решение - ничем не могу помочь.

Да знаю я как была решена его задачка. Черезжопинский способ имитировать возможности Connector

#233
0:00, 18 апр. 2013

Kartonagnick
Отлично.
Как ваше решение можно будет задействовать из exe, который скомпилирован на совершенно другом языке?
Или этот .exe является сам по себе интерпретатором. Как он сможет вызвать то, не знаю что, не попортив стек в случае ошибки?

#234
0:01, 18 апр. 2013

Kartonagnick
> Итак, как именно ты будешь решать, что именно тебе нужно в данный момент?
эм.. наверно я решу также как и всегда, путём логического мышления XD ты реально так странно говоришь, ты накурился?
Твой вопрос идентичен вопросу "Итак, как именно ты будешь решать, какую тебе функцию надо вызвать?" Твой вопрос бессмыслен и не имеет никакого отношения к делегатам.
Kartonagnick
> Объясни какой конкретно делегат ты скормишь роботу. Понятливый ты наш
faceplalm. уже в сотый раз говорю тот который я посчитаю нужным.
Kartonagnick
> Если что то пойдет через жепь, придется ещё познать, какую смысловую нагрузку
> несет этот инт, и какие значение к нему приходят.
XD ответ простой, никакую. иначе, это плохо построенная логика, еслибы нужна была смысловая нагрузка, то он требовал бы не int а строго определённый тип.
по типу
void setHandler(const Den::TConnector<food()>& handler);
Kartonagnick
> Моему вода с гуся.
Твой работать не будет, естественно ему вода с гуся. XD
Kartonagnick
> На задачках типа ALX`совой
а что у него за задача была? мне уже лень искать.
Kartonagnick
Ответь на вопрос, когда ты пишешь обработчик события OnClick для кнопки, разве кнопка должна знать что ты там должен записать?

#235
0:17, 18 апр. 2013

Kartonagnick
> Здрасти. Приехали. Тоесть, получается, что делегат куценький. Даже на
> костантный метод нацелиться не сумеет.
Этот делегат - не мой. Судя по всему, набросан на коленке.
А std::function прекрасно с этим справляется.
Kartonagnick
> Но тогда протокол делегата не даст вам гарантий работоспособности.
Дает, еще как дает. Вместо повреждения стека - будет абсолютно корректный вызов.
Что ошибка содержится уровнем выше - это уже не проблемы функтора.
Его вызвали с интом - и он переадресовал вызов тому, что этот инт примет (если, конечно, reinterpter_cast'ом не побаловались. Тут уже медицина бессильна)
Kartonagnick
> объект.ДобавитьЗадание(ИскатьВрагов(парам) )
> объект.ДобавитьЗадание(ИскатьЕду(парам))
> объект.ДобавитьЗадание(ЗапуститьФункцию(парам))
Повнятнее.

+ Показать
#236
0:26, 18 апр. 2013

Chaos_Optima
> эм.. наверно я решу также как и всегда, путём логического мышления XD ты
> реально так странно говоришь, ты накурился?
> Твой вопрос идентичен вопросу "Итак, как именно ты будешь решать, какую тебе
> функцию надо вызвать?" Твой вопрос бессмыслен и не имеет никакого отношения к
> делегатам.

Вот именно. Долго же до тебя доходила моя мысль. Ортогонально к делегату. Ортогонально к теме безопасности связки.
Параметр шаблона делегата сам по себе не является гарантом безопасности связки.

100% гарантий тут вообще не существует. Но единственный и серьёзный бонус к безопасности - это сама архитектура компонентов, и строгое следование принятому регламенту об именованных типами сообщениях.

Chaos_Optima
> faceplalm. уже в сотый раз говорю тот который я посчитаю нужным.

Допустим ты выбрал первый метод. Почему? Почему именно он? Почему не какой нибудь другой?

Я тебе объясню почему: потому что протокол делегата тебе нихрена ни о чем интересном не поведал. И ты полез в документацию робота, смотреть, чем его нужно кормить. А потом полез в документацию земли, смотреть, какими методами, какие  данные она поставляет.

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

Не имея же этих знаний, но имея протокол делегата, ты бы нихрена бы не сделал.

Протокол делегата - ничто. Протокол передачи данных между компонентами - все.

Chaos_Optima
> Твой работать не будет, естественно ему вода с гуся. XD

На чем основано это утверждение?


Chaos_Optima
> XD ответ простой, никакую. иначе, это плохо построенная логика, еслибы нужна
> была смысловая нагрузка, то он требовал бы не int а строго определённый тип.
> по типу
> void setHandler(const Den::TConnector<food()>& handler);

Вот и ещё один созрел, что все решает протокол передачи данных. А не протокол самого делегата.


Chaos_Optima
> а что у него за задача была? мне уже лень искать.

Мне тоже лень.


Chaos_Optima
> Ответь на вопрос, когда ты пишешь обработчик события OnClick для кнопки, разве
> кнопка должна знать что ты там должен записать?

Нет. Ни кнопка, ни роботы, ни земля - никто из них не интересуется ничем, кроме себя любимых.

Grey304
> Отлично.
> Как ваше решение можно будет задействовать из exe, который скомпилирован на
> совершенно другом языке?
> Или этот .exe является сам по себе интерпретатором. Как он сможет вызвать то,
> не знаю что, не попортив стек в случае ошибки?

1. Я ничего не знаю о подобных межмодульных взаимодействиях.
Поэтому, мало что могу сказать по этому поводу. Однако, моё решение предоставляет возможность использовать TConnector.
А это означает, что моё решение будет работать везде, где может работать тот же std::function.

2. Если бы я знал, как это организовать для std::function, то я смог бы ответить конкретнее.

3. Что касается самого Connector, то насколько мне известно, rtti между модулями не работает. Либо не факт, что работает. Поэтому, я не уверен, что его можно использовать для этой цели.

4. Есть мнение, что для проектов-полиглотов (которые пишутся с применением разных языков), лучше подойдет c-style API, нежели ООП, с делегатами.

#237
0:37, 18 апр. 2013

Grey304
> Дает, еще как дает. Вместо повреждения стека - будет абсолютно корректный
> вызов.
> Что ошибка содержится уровнем выше - это уже не проблемы функтора.

Это такая защита от ошибок - смотреть стек вызовов? Ну и про connector тоже можно сказать - косяки вызывающей стороны - это не его проблемы

Grey304
> Так устраивает?

Нет не устраивает. Это нефига не читабельно. И где иллюстрация возможности запуска произвольной функции, через функтор?

#238
0:47, 18 апр. 2013

Kartonagnick
> Нет не устраивает. Это нефига не читабельно. И где иллюстрация возможности
> запуска произвольной функции, через функтор?
Расшифруйте поток сознания.
Там и так накиданы произвольные функции.
А шаблонность с виртуальностью не дружит.
И что конкретно нечитабельно?
bind?
Kartonagnick
> 4. Есть мнение, что для проектов-полиглотов (которые пишутся с применением
> разных языков), лучше подойдет c-style API, нежели ООП, с делегатами.

+ Показать
#239
0:47, 18 апр. 2013

Kartonagnick
> Параметр шаблона делегата сам по себе не является гарантом безопасности связки.
эм.. как это не является? параметр шаблона гарантирует что он безопасно свяжется, и вызовется. Что там внутри происходит, он само собой не гарантирует, да и не должен, для него это должен быть чёрный ящик.
Kartonagnick
> Почему? Почему именно он? Почему не какой нибудь другой?
потому что захотел XD это же очевидно сэр.
Kartonagnick
> Я тебе объясню почему: потому что протокол делегата тебе нихрена ни о чем
> интересном не поведал
и не должен.
Kartonagnick
> И ты полез в документацию робота, смотреть, чем его нужно кормить.
Нет, мне это ненужно, мне нужно знать только в какой момент он вызовет делегат и то это не всегда нужно.
Kartonagnick
> Протокол делегата - ничто. Протокол передачи данных между компонентами - все.
ты какой то бред несёшь. чем отличается протокол делегата от протокола передачи данных?
Kartonagnick
> На чем основано это утверждение?
потому что у тебя сигнатура зависит не от типа делегата от аргументов вызова делегата, соответственно, если твой делегат в определённом месте будет вызван по другому, то произойдёт падение.
Kartonagnick
> Нет. Ни кнопка, ни роботы, ни земля - никто из них не интересуется ничем, кроме
> себя любимых.
ну вот и всё, соответственно ему совершенно пофиг что я выберу GetData1 или GetData2, главное чтобы сигнатура совпадала.
Kartonagnick
> Вот и ещё один созрел, что все решает протокол передачи данных. А не протокол
> самого делегата.
XD да ты хрень несёшь. Протокол передачи данных это у тебя что тип возврата? Так у делегата основная суть не возвращаемое значение а сам вызов, 90% используемых делегатов имеют возвращаемый тип void.

Страницы: 112 13 14 15 16 17 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.