Буст хорош тем, что авторам языков программирования нужно туда смотреть и делать все это на языковом уровне. Прямо по списку. Каждая библиотека — фича языка (ну кроме традиционно библиотечных вещей типа ввода-вывода конечно же). А непосредственно такими вот макросами ИМХО лучше не пользоваться:)
Рискну навлечь на себя праведный гнев, ввязавшись в холивар…
Но по-моему (повторяю и подчеркиваю — это мое мнение! — оно не обязано совпадать с вашим):
«совершенный код» — это тот код, который (1)короче и в котором (2)меньше шансов ошибиться
Да, приведенный пример решает второй пункт, но никак не коррелирует с моим первым критерием.
Если у ваших функций 5 параметров, где вперемешку int и int& причем несколько из них заданы по умолчанию — проблема в вашей голове, а не в C++ и boost c подобного рода костылем эту проблему не решит.
В статье хотелось бы увидеть пример кода, который генерируется в результате разворачивания этого макроса. Особенно интересно то, во что превращается код вызова с именованными аргументами.
Касательно самого подхода, имхо, проблема надумана. Нормальная среда разработки подскажет и порядок, и значения по умолчанию для любой функции. А как подсказка будет работать для сгенерированного из макроса кода — не представляю.
Идеального решения нет, согласен. Наименее стрёмный из того, что мне пришло в голову — это использовать для дефолтных значений аргументов статические поля какого-нибудь специального класса, или на худой конец именованные константы.
Не совсем по теме, но я не понимаю, почему это убрали из C++? По сути, основное обратно несовместимое изменение, причём совершенно не понятно, кому оно помешало.
Эти костыли не просто так появились. Boost.Graph широко использует их. Сходу нагуглил: тут вроде обосновывают.
Мне кажется, что под Boost.Graph их и разрабатывали. Не знаю, как объявлять такие функции, а использовать вполне удобно.
Относительно простое решение есть через множество методов c return *this:
some_object.width( 10 ).height( 15 ).hidden( true );
А функции с более чем 2-3 параметрами вообще не стоит создавать имхо, тогда и боротся с ними не придется.
в целях изучения возможностей С++ — интересно, а вот на практике такое использовать… чего стоит только определение функции, в которое нужно вчитываться даже для того, чтобы понять сколько же там все таки параметров, какое у функции имя и что она возвращает.
ИМХО, чего только люди не придумают, лишь бы не слазить с С++.
Этот уникальный язык предоставляет настолько богатые возможности, что взяв двух профессионалов С++ нет никакой гарантии, что они поймут код друг друга без нескольких часов предварительного анализа используемых подходов. А так да, если разобраться то «все просто».
p.s. Сам ушел несколько лет назад с С++ в C# и с тех пор с содроганием вспоминаю ощущение, когда вместо того, чтобы решать реальную задачу борешься с языком.
* вышенаписанное является моим личным мнением и не претендует на абсолютную истинность
Именованные параметры Boost