Здравствуйте, Тёмчик, Вы писали:
S>>Сперва прочитайте то, что вам пишут, потом уже отвечайте.
Тё>OMG да я понял, что вы давно слились, когда запели про "10 подписок".
Я про случай с небольшим количеством подписчиков говорил с самого начала:
http://rsdn.org/forum/job/7911770.1Автор: so5team
Дата: 24.12.20
S>>Вы заявили следующее (http://rsdn.org/forum/job/7907304.1):Автор: Тёмчик
Дата: 17.12.20
Тё>Реалтайм бывает soft и hard. Soft вообще похрен на чём делать, а для hard плюсы не подходят (если не рассматривать C с классами).
Т.е. когда вас прижали к стенке вашей же цитатой, то вы переобуваетесь и признаете, что речь таки шла про рилтайм. ЧТД.
S>>Тёмчик, давайте говорить о примере от B0FEE664. В котором под T можно подразумевать только std::pair<OnPress, void*>. Если вы хотите ввести в обсуждение еще что-то, то потрудитесь это описать, чтобы люди понимали, о чем речь.
Тё>Почему у вас onpress в типе? Почему у вас void*? Вы что, про статическую типизацию не слыхали?
Это не у меня. Это у человека, который написал пример, приведенный B0FEE664. А тому человеку, возможно (и скорее всего) нужно было в качестве callback-ов использовать чисто сишные функции. А это может потребоваться по разным причинам, начиная от использования легаси-кода и заканчивая интеграцией C++ного кода и кода на каком-нибудь Lua или Python (из которых наружу торчат C-шные интерфейсы).
S>>Т.е. вы для хранения списка подписок предлагаете хранить еще и специальный sentinel node?
Тё>Я не "предлагаю" — это оптимизация связного списка для упрощения его операций, почитайте, учиться ведь всегда полезно.
Так ведь я не про упрощение, а про связанные с этим расходы.
S>>Подписчик.
Тё>Ну вот ваш подписчик должен хранить интерфейс для отписки. Может хранить пачку таких подписок в списке, и отписываться в деструкторе, например.
Или он просто хранит у себя указатель на Button и вызывает RemoveOnButtonPress в нужных ему местах.
S>>На словах все герои. Только вот если у вас отписка работает через поиск (по указателю на callback или по какому-то уникальному Id), то она оказывается более устойчивой к подобным ошибкам.
Тё>Т.е. вы смирились с фактом, что в вашем говнокоде нет определённости, придёт отписка дважды, или вообще не придёт. И поэтому вы городите тормозной кривой код, оправдывая это порно "локальным кэшем".
Мой говнокод, в отличии от вашего идеального, свободно лежит в открытом доступе. И любой желающий может посмотреть и сделать выводы. В отличии от.
Тё>Возвращается ссылка на интерфейс Subscription. Это может быть наследник от Node имплементирующий Subscription. О каком каком копировании вы поёте?
Тёмчик, мы же про C++ говорим, здесь вы не можете вернуть "интерфейс". Вам нужно возвращать либо экземпляр конкретного класса (и тогда сталкиваться с проблемой копирования экземпляров), либо возвращать (умный) указатель на реализацию интерфейса со всеми вытекающими для этого последствиями.