C++: ВЫ используете Loki или Повышение для функторов?

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

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

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

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

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

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

12
задан unicorn2 8 May 2014 в 17:21
поделиться

4 ответа

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

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

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

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

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

4
ответ дан 2 December 2019 в 06:44
поделиться

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

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

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

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

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

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

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

12
ответ дан 2 December 2019 в 06:44
поделиться

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

5
ответ дан 2 December 2019 в 06:44
поделиться

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

2
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

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