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

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

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

Kartonagnick
> А я вот просто уверен, что прежде чем назначить потребителю поставщика тебе
> придется понять, что именно хочет потребитель, и что именно предоставляет
> поставщик. Тююю...
Лол. Над чем смеетесь?
Зная сигнатуру, я уже сужаю круг методов.
Kartonagnick
> А теперь представь себе, что в проекте множество компонентов, с множеством
> методов.
И чем ваш тут коннектор поможет? Когда эти компоненты должны еще и во время исполнения подгружаться согласно конфигам? Да модули будут еще не одинаковыми компиляторами собраны?
Нее, тут рулит исключительно эмуляция динамики поверх чистейшей статики. А type_info и динамик касты идут лесом.


#211
18:50, 17 апр. 2013

Kartonagnick
> У земли два метода, возвращающие int. Какой именно?
Тот который нам нужен, очевидно.

Kartonagnick
> Ты почему то думаешь, что потребитель по дефолту сожрет все что угодно, лишь бы
> оно отвечало протоколу делегата.
А почему должно быть по другому?

Kartonagnick
> Программисту 1й точки нужно совершенно четко осознавать какие услуги он
> определяет для потребителей.
Нет же, главный поинт делегатов как раз в том, что никто ни о ком ничего не знает. Мы передаем кому-то std::function, кто-то ее когда-нибудь дергает.

Kartonagnick
> Один из методов может вернуть погоду в мире. А другой - остаток жратвы. А
> третий ещё что то.
> Что получится, если роботу назначат погоду вместо жратвы?
Боретесь с проблемами которые сами же и сделали? Понятно....

#212
19:07, 17 апр. 2013

Chaos_Optima
> а причём тут костыльная архитектура?

Ну давай поговорим за архитектуру.
Я знаю две схемы связей с делегами. Все они имеют свои плюсы и минусы:

+ Показать

#213
19:19, 17 апр. 2013

Grey304
> Лол. Над чем смеетесь?
> Зная сигнатуру, я уже сужаю круг методов.

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

+ Показать
#214
19:25, 17 апр. 2013

++i++
> Тот который нам нужен, очевидно.

Как ты определишь какой именно метод тебе нужен, Кэп?

++i++
> Нет же, главный поинт делегатов как раз в том, что никто ни о ком ничего не
> знает. Мы передаем кому-то std::function, кто-то ее когда-нибудь дергает.

А кто решает, и в какой момент принимается это решение: чем заправить делегат, и кому его впихнуть?

Добро пожаловать на 1ю точку.
++i++
> Боретесь с проблемами которые сами же и сделали? Понятно....

Я там привел пример: два метода есть у земли. Оба они отвечают протоколу <int()>
Как ты узнаешь, какой именно метод нужно поставить роботу?

Реши эту проблему без моего коннектора. А я посмотрю, чем твоё решение, скажем с использованием std::function будет отличатся от решения с использованием любого другого делегата

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

#215
19:29, 17 апр. 2013

Kartonagnick
> А я вот ничего не сужаю. Я сразу знаю. И наверняка
Мда, вы мастер демагогии и передергиваний 90 уровня.
То на требование описать, какой функтор Роботу нужен требуете разбираться в куче методов, с не говорящими именами и которые возвращают ничего не говорящий int.
То сами начинаете давать методам Мира ( какая земля? Мир, World лучше описывает это) очень даже говорящие типы.
И кстати, вот это -
void GetData(For_Robot& );
- петля. "Мир" не должен интересоваться конкретным роботом.
Это Робот должен знать, что с Миром можно сделать.
Или наоборот - класс "Робот" уже готов и неизменяем. А вот класс "Мир" придется делать с учетом "Робота".

#216
19:37, 17 апр. 2013

Grey304
> Мда, вы мастер демагогии и передергиваний 90 уровня.

Я утверждаю, что при работе с делегатами критичен протокол передачи данных (набор правил, по которым определяется, как правильно отправлять/получать данные).
И плевать на сигнатуру функций.

И в чем демагогия?

Grey304
> - петля. "Мир" не должен интересоваться конкретным роботом.
> Это Робот должен знать, что с Миром можно сделать.

На самом деле никто не никому ничего не должен. Робот не знает ни о каком мире. Он лишь помечает собственные сигналы своими метками, и читает извне нечто со своими метками.

С землей Аналогично.

#217
19:45, 17 апр. 2013

Grey304
> Все. Больше я там ничего не трогал))

Что то я не уловил в этой выдержке кода, как он может нацелится на константный метод. И как он выбирает между константной или неконстатной версиями

#218
20:07, 17 апр. 2013

Kartonagnick
> Я утверждаю, что при работе с делегатами критичен протокол передачи данных
> (набор правил, по которым определяется, как правильно отправлять/получать
> данные).
> И плевать на сигнатуру функций.
> И в чем демагогия?
В том, что сигнатура функций - это и есть "что при работе с делегатами критичен протокол передачи данных (набор правил, по которым определяется, как правильно отправлять/получать  данные)."

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

Kartonagnick
> На самом деле никто не никому ничего не должен. Робот не знает ни о каком мире.
> Он лишь помечает собственные сигналы своими метками, и читает извне нечто со
> своими метками.
Отлично.
Откомпилируйте это:

+ Показать

Kartonagnick
> как он может нацелится на константный метод. И как он выбирает между
> константной или неконстатной версиями
Оно не ради этого писалось.
А если надо различать - перегрузка функций - ваш лучший друг.
#219
20:21, 17 апр. 2013

Kartonagnick
> Странно. Потому что эту проблему я наблюдал в проекте, в котором не
> использовался мой коннектор. Там использовался std::function со всякими
> буст-биндами и ещё воз и малая тележка всякого маловразумительного добра.
там всё элементарно разруливается дебагером, у меня проблем никогда не было.
Kartonagnick
> У земли два метода, возвращающие int. Какой именно?
эм... это как бы пользователь должен решить, делегату то пофиг.
Kartonagnick
> Ты почему то думаешь, что потребитель по дефолту сожрет все что угодно, лишь бы
> оно отвечало протоколу делегата.
да, в этом и есть смысл делегатов. Ты походу реально не врубаешься для чего они нужны.
Kartonagnick
> И я просто уверен, что прежде чем назначить потребителю поставщика тебе
> придется понять, что именно хочет потребитель, и что именно предоставляет
> поставщик. Тююю...
пфф. как раз таки, я ничего и не должен знать.

Kartonagnick
> Ты никак его не освободишь от необходимости знать и о поставщике и о
> потребителе.
вот как раз таки делегаты и освобождают, в этом их смысл.
Kartonagnick
> Что получится, если роботу назначат погоду вместо жратвы?
эт как? у него делегат имеет такой вид Delegate<food()> в случае с шаблонами ты никак не назначишь ему wether().
Kartonagnick
> 1. Круговая схема. Робот захотел жрать. Он излучает в эфир "хочу жрать" . И
> дальше идет по своим делам. Он лишь уведомляет, но не ждет ответа. Связь
> одностороння
какую то фигню придумал, давай более близкое, про GUI например, там делегаты раскрывают практически весь свой потенциал.

#220
20:28, 17 апр. 2013

Kartonagnick
> Я утверждаю, что при работе с делегатами критичен протокол передачи данных
> (набор правил, по которым определяется, как правильно отправлять/получать
> данные).
> И плевать на сигнатуру функций.
так сигнатура и есть протокол, или ты имеешь ввиду что-то другое под протоколом?

#221
21:50, 17 апр. 2013

Chaos_Optima
> да, в этом и есть смысл делегатов. Ты походу реально не врубаешься для чего они
> нужны.

Ответь пожалуйста, какой именно метод подойдёт роботу:

class Robot
{
public:
    void setHandler(const Den::TConnector<int()>& handler);
};

class World
{
public:
    int GetData1()const;
    int GetData2()const;
};

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


Ты походу сам не врубаешься для чего нужны делегаты.

Chaos_Optima
> пфф. как раз таки, я ничего и не должен знать.

Сейчас ты - программист 1й точки. Тебе нужно связать робота и землю. Для этого тебе нужно скормить роботу заряженный делегат.
Как ты будешь выбирать какой именно метод земли подойдет для робота?
Как ты будешь это делать, если ты не знаешь, что именно возвращают методы земли?

Chaos_Optima
> вот как раз таки делегаты и освобождают, в этом их смысл.

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

Chaos_Optima
> какую то фигню придумал, давай более близкое, про GUI например, там делегаты
> раскрывают практически весь свой потенциал.

Хорошо. Но прежде, чем мы двинемся дальше, я хочу увидеть, что ты понял смысл: прокол шаблонного делегата -сам по себе - ничто. Он не поможет тебе правильно установить связи между компонентами.

Сделай выбор. И объясни мне, как именно ты сделал этот выбор.
На чем ты основывался выбирая из двух методов, если она они удовлетворяют протоколу делегата робота.

#222
22:05, 17 апр. 2013

Kartonagnick
> А кто решает, и в какой момент принимается это решение: чем заправить делегат, и кому его впихнуть?
> Как ты определишь какой именно метод тебе нужен, Кэп?
Эту проблему можно решить собрав параметры в структурку. Дать ей и данным понятное название, т.е. вместо:

    int GetData1()const;
    int GetData2()const;
будет
    struct Data1Params
    {
        int Data1;
    };
    struct Data1Params
    {
        int Data2;
    };

    Data1Params GetData1()const;
    Data2Params GetData2()const;
Подсунуть не тот делегат не туда невозможно, все проверяется компилятором. И по сигнатуре видно что где и как используется.
#223
22:42, 17 апр. 2013

Grey304
> В том, что сигнатура функций - это и есть "что при работе с делегатами критичен
> протокол передачи данных (набор правил, по которым определяется, как правильно
> отправлять/получать  данные)."
> Вы сами привели примеры, где все типы известны на момент связывания. И типы там
> не могут взять и поменяться. Программу придется перекомпилировать. Зачем там
> безтиповые функторы с проверкой в рантайме?????

+ Показать


Grey304
> Мы не можем сделать так, чтобы World и Robot не зависели от какого-то третьего
> типа.

+ Показать

Grey304
> Как это стыковать?

паттерн "адаптер"

Grey304
> Оно не ради этого писалось.
> А если надо различать - перегрузка функций - ваш лучший друг.

Здрасти. Приехали. Тоесть, получается, что делегат куценький. Даже на костантный метод нацелиться не сумеет.

#224
22:44, 17 апр. 2013

++i++
> Эту проблему можно решить собрав параметры в структурку. Дать ей и данным
> понятное название, т.е. вместо:

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

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

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