Pull to refresh

Comments 28

Занятный способ конечно, но DSL на перегруженных операторах у меня всегда вызывает двоякие чувства.
здесь это не главное, но если очень хочется, можно заменить его на короткий метод вроде add()
А ещё лучше на operator().
Ну, лично мне так более очевидно, что это не какая-то индексация, а всё-таки вызов метода. В Boost.Program Options, например, реализовано похожим образом…

Сугубо IMHO.
+1
через 5 лет другой программист будет дико долго вспоминать, что значит [ ] в коде создания меню. Потому что [ ] традиционно это обращение по индексу. Обращение. А то, что этот вызов рождает экземпляры классов — автора потом будут матюками обкладывать много-много лет :)
Перечисление [] в столбик не тянет на обращение к индексу :)
Зато квадратные скобки визуально разбавляют кашу из круглых, как мне кажется.
<offtopic>
Скажите это программистам на Lisp :D
</offtopic>
Может быть и красиво, но синтаксически ничего не понятно, если посмотреть на данный код. Я не использую операторы не по назначению. Использую только стандартное поведение, это не вносит путаницу, особенно в крупных проектах.

Да и часто приходится генерировать именно динамически, нужны циклы и т.д., а это вариант не годен. Я бы скорее всего сделал с созданием объектов.
насчет циклов согласен, у меня действительно другая задача была — много небольших различных конфигураций меню
Красиво.
А я недавно решал другую задачу. Как собственными силами сделать портабельный и безопасный аналог printf на C++. Вот что получилось.

По-английски:
Wprintf(L"{1} instead of {2}")(actual)(intended).c_str()


По-русски:
Wprintf(L"Не {2}, а {1}")(actual)(intended).c_str()
А я на открытие велосипеда и не претендую. Просто интереснее было реализовать это самому.
Вот кстати не понимаю я зачем делать перегрузки % и подобное. Это на мой взгляд куда хуже чем тот же метод QString::arg() в Qt.
В бусте, я заметил, вообще любят перегружать операторы, особенно нестандартные типа % или, (запятая). Преимущество % в том, что 1) меньше писать; 2) достаточно низка вероятность того, что пользователь перегрузил его для своих целей (иначе было бы много путаницы).
действительно, а чем Boost.Format не угодил?
Заглядывая под кат, не думал, что обнаружу там очень крутую и классную идею. В одном моём проекте такой подход (с перегрузкой операторов) сделает код ещё более красивым и читабельным. Мне нужен был намёк и вы мне его дали. Спасибо.
Рад, что вам пригодилось :)
UFO just landed and posted this here
оператор «квадратные скобки» ) Это из той же серии, что оператор «звездочка»
Чем вам не нравится звездочка?
Как бы есть нормальные названия — оператор разыменования (indirection), оператор взятия индекса (array subscript) и т.д. и т.п.
Главное, что все поняли о чем идет речь.
В данном случае всё равно получается, что Вы исходную структуру захардкодили. А где ж динамика? Если через [] можно добавлять пункты/подпункты меню, так то же самое можно сделать через методы типа append() и прочих.
Динамика получается умеренная. Просто альтернативой такому подходу является объявление меню в ресурсах. У меня в приложении, например, три языка. Это значит, что надо повторять объявление одной и той же структуры в разных .rc трижды.
Еще немного динамики получается, если написать так:
[okAvailable ? command(L"Ok", IDOK) : empty()]
хм, немного неожиданно что использован ВинАпи. Думал на голом апи уже и не пишут.
Sign up to leave a comment.

Articles