Re[5]: Friend
От: Evgeny.Panasyuk Россия  
Дата: 12.08.13 18:06
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>С другой стороны это дело довольно элементарно обходится, например так:
class ZZZ {

EP>>можно намного проще:
E>Это ++11, но тут это не суть.

Кроме in-class initialization, что там C++11?

E>Суть в том, что access публикует потроха, "для всех", а через спец. структуру мы публикуем только для тех, кто эту структуру строит => легко найти весь тесно связанный с потрохами код


Спец структуру/функцию, которая будет давать доступ, можно сделать и в моём случае — я же сказал, "сахар по вкусу". А разница в том, что не надо пробрасывать каждое поле вручную.
Да и .access() — тоже легко найти.
Re[6]: Friend
От: Erop Россия  
Дата: 13.08.13 02:04
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Кроме in-class initialization, что там C++11?

Оно самое.


EP>Спец структуру/функцию, которая будет давать доступ, можно сделать и в моём случае — я же сказал, "сахар по вкусу". А разница в том, что не надо пробрасывать каждое поле вручную.

EP>Да и .access() — тоже легко найти.
Да, это я тупанул. Не заметил, что ты приватные поля в структуру собрал. Так, конечно, тое можно, если мы только свои поля публикуем.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Friend
От: sokel Россия  
Дата: 13.08.13 07:43
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ну это же просто обход дырки в языке/компиляторе, а не систематический подход?


А вот ещё вариант когда реально нужен friend: intrusive_ptr.
Аналогично операторам вывода в поток используется ADL для выбора нужной ф-ции intrusive_ptr_add_ref/release. И если в случае с выводом в поток действительно можно обойтись public функцией типа print, то add_ref/release желательно закрыть.

class foo
{
private:
    friend void intrusive_ptr_add_ref(foo* obj) {}
    friend void intrusive_ptr_release(foo* obj) {}
};
Re[5]: Friend
От: Tilir Россия http://tilir.livejournal.com
Дата: 13.08.13 08:41
Оценка: -1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>То есть теперь "доказательство" вредности исключений строится не на том что "goto = зло", exceptions похожи на goto, exceptions = зло, а на том что "non-local-control-flow = зло" ...? То же самое только в профиль


Здесь сложно что-то "доказать", речь о стиле и опыте. Человек проще воспринимает локальные конструкции. В своё время именно переход от GOTO к осмысленным IF, WHILE, etc сильно упростил промышленное программирование. Потом придумали threads и exceptions и стало всё как раньше =)

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

EP>Например, со-процедуры зло? А ведь они "мощнее" исключений, так как позволяют прыгать по стэку и вверх и вниз. И да — некоторые задачи отлично выражаются в терминах сопроцедур. Или другой пример — async/await из последнего C#, которые стали одной из любимых фишек шарпистов. Самый обыкновенный non-local-control-flow. Так что — тоже зло?


Я не люблю спорить на эти темы. Здесь я всё излагаю довольно ясно, кмк: http://rsdn.ru/forum/philosophy/5109064.1
Автор: Tilir
Дата: 22.03.13
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.