Комментарии 28
Занятный способ конечно, но DSL на перегруженных операторах у меня всегда вызывает двоякие чувства.
+1
здесь это не главное, но если очень хочется, можно заменить его на короткий метод вроде
add()
0
А ещё лучше на
operator()
.+1
чем () лучше, чем []?
0
Ну, лично мне так более очевидно, что это не какая-то индексация, а всё-таки вызов метода. В Boost.Program Options, например, реализовано похожим образом…
Сугубо IMHO.
Сугубо IMHO.
+1
Может быть и красиво, но синтаксически ничего не понятно, если посмотреть на данный код. Я не использую операторы не по назначению. Использую только стандартное поведение, это не вносит путаницу, особенно в крупных проектах.
Да и часто приходится генерировать именно динамически, нужны циклы и т.д., а это вариант не годен. Я бы скорее всего сделал с созданием объектов.
Да и часто приходится генерировать именно динамически, нужны циклы и т.д., а это вариант не годен. Я бы скорее всего сделал с созданием объектов.
0
Красиво.
А я недавно решал другую задачу. Как собственными силами сделать портабельный и безопасный аналог printf на C++. Вот что получилось.
По-английски:
По-русски:
А я недавно решал другую задачу. Как собственными силами сделать портабельный и безопасный аналог printf на C++. Вот что получилось.
По-английски:
Wprintf(L"{1} instead of {2}")(actual)(intended).c_str()
По-русски:
Wprintf(L"Не {2}, а {1}")(actual)(intended).c_str()
+1
Мда :) Это практически так же круто, как Boost.Format ;)
+6
А я на открытие велосипеда и не претендую. Просто интереснее было реализовать это самому.
0
Вот кстати не понимаю я зачем делать перегрузки % и подобное. Это на мой взгляд куда хуже чем тот же метод QString::arg() в Qt.
0
действительно, а чем Boost.Format не угодил?
0
Заглядывая под кат, не думал, что обнаружу там очень крутую и классную идею. В одном моём проекте такой подход (с перегрузкой операторов) сделает код ещё более красивым и читабельным. Мне нужен был намёк и вы мне его дали. Спасибо.
+1
НЛО прилетело и опубликовало эту надпись здесь
оператор «квадратные скобки» ) Это из той же серии, что оператор «звездочка»
0
В данном случае всё равно получается, что Вы исходную структуру захардкодили. А где ж динамика? Если через [] можно добавлять пункты/подпункты меню, так то же самое можно сделать через методы типа append() и прочих.
0
Динамика получается умеренная. Просто альтернативой такому подходу является объявление меню в ресурсах. У меня в приложении, например, три языка. Это значит, что надо повторять объявление одной и той же структуры в разных .rc трижды.
Еще немного динамики получается, если написать так:
Еще немного динамики получается, если написать так:
[okAvailable ? command(L"Ok", IDOK) : empty()]
0
хм, немного неожиданно что использован ВинАпи. Думал на голом апи уже и не пишут.
+1
CMenu это MFC
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Описание структуры меню без использования ресурсов