C ++: ВЫ используете Loki или Boost для функторов? - PullRequest
12 голосов
/ 27 июня 2010

Я читал книгу Александреску «Современный дизайн C ++», и меня впечатлили методы, которые он использует, поэтому я хотел добавить библиотеку Loki в свое приложение.

Однако после дальнейшего изучения я увидел, что Boost, который я уже использую, предоставляет множество аналогичных функций (хотя не все, хотя я не смог найти синглтон в Boost, например)

Меня больше всего интересовало использование loki из-за основанного на политике дизайна и функторов.

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

Прежде чем выбрать использование boost или loki для функторов и политик, я бы хотел узнать мнение людей, которые используют их в реальной жизни.

Иногда на бумаге все выглядит очень хорошо, но есть некоторыенедостатки при использовании их по-настоящему:)

Ответы [ 4 ]

12 голосов
/ 27 июня 2010

У Александреску были очень интересные идеи (списки типов, шаблоны классов на основе политик и т. Д.), Но многие из них были улучшены, а также протестированы в более широком диапазоне компиляторов на переносимость и корректность.

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

Например, умные указатели на основе политик - очень хорошая идея, но мы можем выяснить, почему авторы наддува решили не реализовывать shared_ptr и scoped_ptr таким образом:

A. Параметризация обескураживает пользователей. Шаблон shared_ptr тщательно созданный для удовлетворения общих потребностей без обширная параметризация. Когда-нибудь настраиваемый интеллектуальный указатель может быть изобретенным, что также очень легко использовать и очень трудно злоупотреблять. До тех пор тогда shared_ptr - это умный указатель выбор для широкого спектра Приложения. (Те, кто заинтересованы в умные указатели на основе политики должны прочитайте Современный C ++ Дизайн Андрея Alexandrescu.)

Если вам действительно нужно большое количество интеллектуальных указателей, и вам и вашей команде удобно работать с параметризацией шаблонов, тогда подход на основе политик для реализации интеллектуальных указателей может работать для вас. Тем не менее, scoped_ptr и shared_ptr (наряду с weak_ptr), как правило, делают работу довольно тщательно. Комбинаторное поведение классов политики, вероятно, лучше использовать для чего-то, для чего существует широкий спектр полезных комбинаций.

Тем не менее, есть еще несколько интересных предложений от Александреску, которые Буст не рассмотрел. MOJO , например, по-прежнему действительно полезно, пока компиляторы не выполнят лучшую работу по реализации конструкторов перемещения или пока мы не сможем использовать ссылки на rvalue из C ++ 0x. У него также есть несколько очень интересных мыслей по реализации распределителей памяти.

Что касается вопроса, мы используем части Loki, необходимые для mojo, в нашем коммерческом проекте, но в большинстве случаев улучшаемся, когда это уместно.

5 голосов
/ 27 июня 2010

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

4 голосов
/ 27 июня 2010

Я использую Boost во всей моей среде C ++, как расширение стандартной библиотеки (с VC9 и VC10).

Я не использую его во всех проектах.

Я использую его в личных проектах (в основном, в играх), где я получил полный контроль над зависимостями.

IЯ использую boost :: function в большом игровом проекте (с несколькими другими библиотеками от boost).

Локи тоже хорош, но я не чувствовал в этом необходимости.Я думаю, что единственная часть библиотеки, которую я собираюсь использовать, - это Singleton, но я использую пользовательскую, которая на данный момент достаточно хороша.

2 голосов
/ 27 июня 2010

C ++ 0x - это то, что я использую для быстрых функциональных объектов.

...