Комментарии 20
И из за опечатки логи ошибок на 16кб…
+20
Буст хорош тем, что авторам языков программирования нужно туда смотреть и делать все это на языковом уровне. Прямо по списку. Каждая библиотека — фича языка (ну кроме традиционно библиотечных вещей типа ввода-вывода конечно же). А непосредственно такими вот макросами ИМХО лучше не пользоваться:)
+6
Рискну навлечь на себя праведный гнев, ввязавшись в холивар…
Но по-моему (повторяю и подчеркиваю — это мое мнение! — оно не обязано совпадать с вашим):
«совершенный код» — это тот код, который (1)короче и в котором (2)меньше шансов ошибиться
Да, приведенный пример решает второй пункт, но никак не коррелирует с моим первым критерием.
Если у ваших функций 5 параметров, где вперемешку int и int& причем несколько из них заданы по умолчанию — проблема в вашей голове, а не в C++ и boost c подобного рода костылем эту проблему не решит.
Но по-моему (повторяю и подчеркиваю — это мое мнение! — оно не обязано совпадать с вашим):
«совершенный код» — это тот код, который (1)короче и в котором (2)меньше шансов ошибиться
Да, приведенный пример решает второй пункт, но никак не коррелирует с моим первым критерием.
Если у ваших функций 5 параметров, где вперемешку int и int& причем несколько из них заданы по умолчанию — проблема в вашей голове, а не в C++ и boost c подобного рода костылем эту проблему не решит.
+10
В статье хотелось бы увидеть пример кода, который генерируется в результате разворачивания этого макроса. Особенно интересно то, во что превращается код вызова с именованными аргументами.
Касательно самого подхода, имхо, проблема надумана. Нормальная среда разработки подскажет и порядок, и значения по умолчанию для любой функции. А как подсказка будет работать для сгенерированного из макроса кода — не представляю.
Касательно самого подхода, имхо, проблема надумана. Нормальная среда разработки подскажет и порядок, и значения по умолчанию для любой функции. А как подсказка будет работать для сгенерированного из макроса кода — не представляю.
+2
>>Нормальная среда разработки подскажет и порядок, и значения по умолчанию
Что если разработчик функции решит поменять значение по умолчанию?
Ответ «Оторвать разработчику руки» не предлагать плз
Что если разработчик функции решит поменять значение по умолчанию?
Ответ «Оторвать разработчику руки» не предлагать плз
+1
Идеального решения нет, согласен. Наименее стрёмный из того, что мне пришло в голову — это использовать для дефолтных значений аргументов статические поля какого-нибудь специального класса, или на худой конец именованные константы.
0
Или структуры передавать, хотя в плюсах нельзя как в С99 инициализировать поля по именам.
0
Идеальным решением было бы позволить пропускать дефолтные параметры. Но комитет почему-то так не считает.
foo (10, default, default, 20);
Т.е. то же самое, что я предложил ниже, но работает с любыми типами.
Ключевое слово default уже все равно есть, техническая реализация — елементарная.
foo (10, default, default, 20);
Т.е. то же самое, что я предложил ниже, но работает с любыми типами.
Ключевое слово default уже все равно есть, техническая реализация — елементарная.
+4
> В статье хотелось бы увидеть пример кода, который генерируется в результате разворачивания этого макроса.
Увы, пример кода, который генерируется в результате разворачивания этого макроса, в статью не поместится :).
А так пожалуйста, функция с тремя параметрами: pastebin.com/3ntTUfFr
Увы, пример кода, который генерируется в результате разворачивания этого макроса, в статью не поместится :).
А так пожалуйста, функция с тремя параметрами: pastebin.com/3ntTUfFr
0
Проблему с дефолтными параметрами частично можно решить так. Частично, потому как работает только с интегральными типами
ideone.com/mT7z0z
(даю ссылку т.к. тэг source не работает)
ideone.com/mT7z0z
(даю ссылку т.к. тэг source не работает)
+2
Упаси боже использовать эти костыли в продашкене.
+1
Относительно простое решение есть через множество методов c return *this:
some_object.width( 10 ).height( 15 ).hidden( true );
А функции с более чем 2-3 параметрами вообще не стоит создавать имхо, тогда и боротся с ними не придется.
some_object.width( 10 ).height( 15 ).hidden( true );
А функции с более чем 2-3 параметрами вообще не стоит создавать имхо, тогда и боротся с ними не придется.
+1
в целях изучения возможностей С++ — интересно, а вот на практике такое использовать… чего стоит только определение функции, в которое нужно вчитываться даже для того, чтобы понять сколько же там все таки параметров, какое у функции имя и что она возвращает.
ИМХО, чего только люди не придумают, лишь бы не слазить с С++.
Этот уникальный язык предоставляет настолько богатые возможности, что взяв двух профессионалов С++ нет никакой гарантии, что они поймут код друг друга без нескольких часов предварительного анализа используемых подходов. А так да, если разобраться то «все просто».
p.s. Сам ушел несколько лет назад с С++ в C# и с тех пор с содроганием вспоминаю ощущение, когда вместо того, чтобы решать реальную задачу борешься с языком.
* вышенаписанное является моим личным мнением и не претендует на абсолютную истинность
ИМХО, чего только люди не придумают, лишь бы не слазить с С++.
Этот уникальный язык предоставляет настолько богатые возможности, что взяв двух профессионалов С++ нет никакой гарантии, что они поймут код друг друга без нескольких часов предварительного анализа используемых подходов. А так да, если разобраться то «все просто».
p.s. Сам ушел несколько лет назад с С++ в C# и с тех пор с содроганием вспоминаю ощущение, когда вместо того, чтобы решать реальную задачу борешься с языком.
* вышенаписанное является моим личным мнением и не претендует на абсолютную истинность
+2
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Именованные параметры Boost