Pull to refresh

Comments 28

Занятный способ конечно, но DSL на перегруженных операторах у меня всегда вызывает двоякие чувства.
здесь это не главное, но если очень хочется, можно заменить его на короткий метод вроде add()
Ну, лично мне так более очевидно, что это не какая-то индексация, а всё-таки вызов метода. В 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 landed and left these words here
оператор «квадратные скобки» ) Это из той же серии, что оператор «звездочка»
Чем вам не нравится звездочка?
Как бы есть нормальные названия — оператор разыменования (indirection), оператор взятия индекса (array subscript) и т.д. и т.п.
Главное, что все поняли о чем идет речь.
В данном случае всё равно получается, что Вы исходную структуру захардкодили. А где ж динамика? Если через [] можно добавлять пункты/подпункты меню, так то же самое можно сделать через методы типа append() и прочих.
Динамика получается умеренная. Просто альтернативой такому подходу является объявление меню в ресурсах. У меня в приложении, например, три языка. Это значит, что надо повторять объявление одной и той же структуры в разных .rc трижды.
Еще немного динамики получается, если написать так:
[okAvailable ? command(L"Ok", IDOK) : empty()]
хм, немного неожиданно что использован ВинАпи. Думал на голом апи уже и не пишут.
Sign up to leave a comment.

Articles