Каковы положительные и отрицательные стороны шаблонов C++? [закрытый]

Для обозначения фильтра сервлета нет специальной аннотации. Вы просто объявляете @Bean типа Filter (или FilterRegistrationBean). Пример (добавление настраиваемого заголовка ко всем ответам) находится в собственном Boot EndpointWebMvcAutoConfiguration ;

Если вы только объявляете Filter, он будет применяться ко всем запросам. Если вы также добавили FilterRegistrationBean, вы можете дополнительно указать отдельные сервлеты и шаблоны url для применения.

Примечание:

Начиная с Spring Boot 1.4, FilterRegistrationBean не устарел и просто переместил пакеты с org.springframework.boot.context.embedded.FilterRegistrationBean на org.springframework.boot.web.servlet.FilterRegistrationBean

26
задан fmsf 16 March 2009 в 20:20
поделиться

8 ответов

Шаблоны являются очень мощным механизмом, который может упростить много вещей. Однако для использования их правильно требует большого количества времени и опыта - для решения, когда их использование является соответствующим.

Для меня самые важные преимущества:

  • сокращение повторения кода (универсальные контейнеры, алгоритмы)
  • сокращение повторения усовершенствованного кода (MPL и Fusion)
  • статический полиморфизм (=performance) и другие вычисления времени компиляции
  • основанный на политике дизайн (гибкость, возможность многократного использования, более легкие изменения, и т.д.)
  • увеличивающаяся безопасность бесплатно (т.е. анализ размера через Единицы Повышения, статические утверждения, проверки понятия)
  • функциональное программирование (Финикс), отложенные вычисления, шаблоны выражения (мы можем создать Проблемно-ориентированные встроенные языки в C++, у нас есть большая библиотека Proto, у нас есть Блиц ++)
  • другие менее захватывающие инструменты и приемы, используемые в повседневной жизни:
    • STL и алгоритмы (каково различие между for и for_each)
    • связывают, лямбда (или Финикс) (напишите более ясный код, упростите вещи)
    • Функция Повышения (делает обратные вызовы записи легче)
    • кортежи (как, универсально хешировать кортеж? Используйте Fusion, например...)
    • TBB (parallel_for и другой STL как алгоритмы и контейнеры)
  • , можно ли вообразить C++ без шаблонов? Да я могу в ранние времена, Вы не могли использовать их из-за ограничений компилятора.
  • Вы записали бы в C++ без шаблонов? Нет, поскольку я потерял бы многие упомянутые выше преимущества.

Оборотные стороны:

  • Время компиляции (например, добавляют Сприт, Финикс, MPL и некоторый Fusion и Вы может пойти для кофе)
  • Люди , кто может использование и понимать, что шаблоны не настолько распространены (и эти люди полезны)
  • Люди , кто думает, что они могут использование и понимать, что шаблоны довольно распространены (и эти люди опасны, поскольку они могут сделать ад из Вашего кода. Однако большинство из них после некоторого образования/менторства присоединится к группе, упомянутой в предыдущей точке)
  • шаблон export поддержка (отсутствие)
  • , сообщения об ошибках могли быть менее загадочными (после того, как некоторое изучение Вас может найти то, в чем Вы нуждаетесь, но все еще...)

я настоятельно рекомендую следующие книги:

47
ответ дан Anonymous 15 October 2019 в 07:11
поделиться

На положительной стороне, шаблонах C++:

  • Допускают обобщение Уменьшения типа

  • объем избыточного кода, Вы должны к Справке типа

  • создать безопасный с точки зрения типов код

  • , оценены во время компиляции

  • , Может увеличить производительность (как альтернатива полиморфизму)

  • Справка для создания очень мощных библиотек

На отрицательной стороне:

  • Может быть сложным быстро, если Вы не осторожны

  • , Большинство компиляторов дает загадочные сообщения об ошибках

  • , может быть трудно использовать/отлаживать высоко шаблонный код

  • , Имеют по крайней мере одну синтаксическую причуду (>>, оператор может вмешаться в шаблоны)

  • , Справка делает C++ очень трудным проанализировать

, В целом, внимательное рассмотрение должно использоваться относительно того, когда использовать шаблоны.

15
ответ дан Colin 15 October 2019 в 07:11
поделиться

Положительные стороны: мощный; позволяет Вам:

  • предписывают, чтобы атрибуты времени компиляции и вычисление
  • описали универсальные алгоритмы, и datastructures
  • делают много других вещей, которые иначе были бы повторяющимися, скучными, и склонный к ошибке
  • делает их в языке, без макросов (который может быть намного более опасным и неясным!)

Отрицательные стороны: мощный; позволяет Вам:

  • вызывают ошибки времени компиляции, которые являются подробными, вводящими в заблуждение, и неясными (хотя не столь неясный, и вводящий в заблуждение как макросы...)
  • создают неясный и опасный misdesigns (хотя не так с готовностью как макросы...)
  • чрезмерное увеличение размера кода причины, если Вы не осторожны (точно так же, как макросы!)

Шаблоны значительно увеличивают жизнеспособное пространство дизайна, которое является не обязательно плохой вещью, но оно действительно делает их что намного тяжелее использовать хорошо. Шаблону кода нужен maintainters, кто понимает не только функции языка, но и последствия дизайна функций языка; в сущности это означает, что много групп разработчиков избегают всех кроме самых простых и наиболее узаконенных приложений шаблонов C++.

В целом, шаблоны делают язык намного более сложным (и трудный реализовать правильно!). Шаблоны не были намеренно разработаны для Тьюринга, но они так или иначе - таким образом, даже при том, что они могут сделать примерно, что-либо, с помощью них может оказаться большей проблемой, чем это стоит.

4
ответ дан 15 October 2019 в 07:11
поделиться

Шаблоны должны использоваться экономно.

"Ужасный для отладки" и "трудно для чтения" не большие аргументы против хорошего шаблонного использования с хорошими абстракциями.

Лучшие отрицательные аргументы пошли бы к тому, что STL имеет много "глюков", и использующие шаблоны в целях, которые уже покрывает STL, изобретают велосипед. Шаблоны также увеличивают время ссылки, которое может быть беспокойством о некоторых проектах, и иметь много особенностей в их синтаксисе, который может быть тайным людям.

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

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

2
ответ дан Dan Olson 15 October 2019 в 07:11
поделиться

Я не вижу, как их трудно считать. Что нечитабельно приблизительно

vector <string> names;

, например? Чем Вы заменили бы его?

1
ответ дан 15 October 2019 в 07:11
поделиться

Один из недостатков, которые я не видел упомянутый еще, является тонкими семантическими различиями между регулярными классами и инстанцированиями шаблонов классов. Я могу думать:

  1. typedef имена типов редактора в типах предка не наследованы шаблонными классами.
  2. потребность опрыснуть typename и template ключевые слова в соответствующих местах.
  3. шаблоны Функции членства не могут быть virtual.

Эти вещи могут обычно преодолеваться, но они - боль.

2
ответ дан j_random_hacker 15 October 2019 в 07:11
поделиться

Преимущество: Могут быть созданы универсальные Типы данных.

Недостаток: Код, Чрезмерно увеличивающийся в размерах

0
ответ дан Vinay 15 October 2019 в 07:11
поделиться

Повторно используемый код сделан с шаблоном. Его приложение соответствует профилю каждого.

-2
ответ дан lsalamon 15 October 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: