C++ "именованный параметр идиома" против Boost:: библиотека параметров


Я посмотрел как на именованную идиому параметров , так и на Boost::Parameter library. Какие преимущества имеет каждый из них перед другим? Есть ли веская причина всегда выбирать одно из них вместо другого, или каждый из них может быть лучше другого в некоторых ситуациях (и если да, то в каких ситуациях)?

6 36

6 ответов:

Реализовать идиому именованного параметра действительно легко, почти так же легко, как использовать Boost::Parameter, поэтому она сводится к одному главному пункту.

- у вас уже есть зависимости boost? Если вы этого не сделаете, параметр Boost::недостаточно особенный, чтобы заслужить добавление зависимости.

Лично я никогда не видел Boost:: parameter в производственном коде, 100% времени это была пользовательская реализация именованных параметров, но это не обязательно хорошо.

Обычно я большой поклонник Boost, но я бы не стал использовать Boost.Библиотека параметров по нескольким причинам:

  1. Если вы не знаете, что происходит, вызов выглядит так, как будто вы назначаете значение переменной в области видимости о вызывающей функции ранее делаю звонок. Это может быть очень запутанным.
  2. существует слишком много шаблонного кода, необходимого для его настройки в первую очередь.

Еще один момент, хотя я никогда не использовал идиому именованных параметров, я использовал параметр Boost для определения до 20 необязательных аргументов. И, мои времена компиляции безумны. То, что раньше занимало пару секунд, теперь занимает 30 сек. это складывается, если у вас есть библиотека вещей, которые используют ваше маленькое приложение, которое вы написали с помощью параметра boost. Конечно, я могу реализовать его неправильно, но я надеюсь, что это изменится, потому что в остальном мне это действительно нравится.

Идиома именованного параметра намного проще. Я не могу понять (прямо сейчас), зачем нам нужна сложность библиотеки параметров Boost::. (Даже предполагаемая "особенность" выведенных параметров, похоже, способ ввести ошибки кодирования;))

Вы, вероятно, не хотите повышения.Параметр для общей логики приложения настолько, насколько вы хотели бы его для кода библиотеки, который вы разрабатываете, где он может быть довольно экономичным для клиентов библиотеки.

Никогда не слышал ни о том, ни о другом, но, просматривая ссылки, named parameter намного проще и очевиднее для понимания. Я бы выбрал его в мгновение ока над реализацией boost.