как начать использовать повышение - PullRequest
11 голосов
/ 28 марта 2009

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

Какие ключевые языковые функции мне нужно усовершенствовать, чтобы эффективно использовать повышение и сократить время обучения? Я видел, что функциональные объекты обычно используются, поэтому мне, вероятно, придется исправить это.

Кроме того, есть ли какие-нибудь учебники и 101 ресурс, на которые я могу быстро взглянуть, чтобы просто почувствовать и понять, как использовать boost.

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

Относящиеся

Ответы [ 7 ]

9 голосов
/ 28 марта 2009

Boost имеет невообразимое количество библиотек. Легко начать - 1001 *

  • noncopyable
  • массив
  • circular_buffer
  • Еогеасп
  • операторы (один из моих любимых)
  • smart_ptr
  • date_time

Более продвинутые включают

  • лямбда
  • 1024 * привязывать *
  • iostreams
  • сериализация
  • тема

Привыкание к повышению требует времени, но уверяю вас, это сделает вашу жизнь намного лучше. Кроме того, рассмотрение того, как кодируются библиотеки повышения, поможет вам улучшить кодирование на c ++, особенно на шаблонах.

Вы упомянули, что вы должны посмотреть, прежде чем пытаться повысить. Я согласен, что функциональные объекты - отличная вещь для исследования. Кроме того, обязательно посмотрите на шаблон программирования. Распространенная проблема, чтобы убедиться, что вы знаете, когда использовать квалификатор typename для зависимых типов. Однако по большей части библиотеки очень хорошо документированы, с примерами и справочными материалами.

6 голосов
/ 28 марта 2009

Скорость обучения обсуждается здесь . Что касается языковых функций, которые полезны? Все они. C ++ - это опасный язык, если вы его недостаточно знаете. RAII, функторы / функциональные объекты и шаблоны, вероятно, охватывают наиболее важные аспекты. Boost разработан аналогично STL, поэтому знание вашей стандартной библиотеки необходимо. Сам Boost использует большое количество метапрограммирования шаблонов, но, как пользователь библиотеки, вам это часто не нужно (если только вы не начинаете играть с Boost.MPL)

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

4 голосов
/ 28 марта 2009

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

C ++ дает вам возможность управлять своей собственной памятью, умные указатели позволяют вам (в основном) использовать ее, когда вам это не нужно.

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

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

boost::any и boost::variant хорошо, что вам нужен вариант типа данных с двумя разными подходами.

boost::regex если вам нужен какой-то текстовый анализ.

boost::thread и boost::filesystem помогут вам написать переносимый код. Если у вас уже есть хорошие библиотеки, специфичные для платформы, они могут вам не понадобиться, но в любом случае они лучше уровня API или C ++.

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

4 голосов
/ 28 марта 2009

Какие ключевые языковые функции мне нужно усовершенствовать, чтобы эффективно использовать повышение и сократить время обучения?

  • Шаблоны
  • функторы
  • Исключения
  • STL
    • итераторы
    • Алгоритмы
    • Контейнеры

... среди прочих.

Есть ли какие-нибудь учебники и 101 ресурс, на которые я могу быстро взглянуть, чтобы просто почувствовать и понять, как использовать boost.

Повышение хорошо задокументировано. Начало здесь .

Слишком много библиотек, чтобы их можно было потерять. Я бы сказал, что начните с чего-то простого, может быть, умных указателей или Boost.Test (фреймворк для юнит-теста) - который быстро поможет вам начать работу Кроме того, попытайтесь придумать проблему, которую вы не можете легко решить с помощью STL. Тогда посмотрите документацию Boost или напишите здесь.

Если вы знакомы с функциональным программированием, посмотрите библиотеки MPL / Lambda.

1 голос
/ 29 марта 2009

После прочтения Помимо стандартной библиотеки C ++: Введение в Boost , я бы порекомендовал случайно просмотреть документацию по boost.org , просто чтобы понять, что доступно. Вы можете глубоко погрузиться в определенную библиотеку надстроек, если она хорошо подходит для конкретного приложения.

1 голос
/ 28 марта 2009

Попробуйте книгу Бьёрна Карлссона: За пределами стандартной библиотеки C ++: введение в повышение . Это довольно просто и легко понять. Я прочитал это после того, как закончил три книги С ++ Скотта Мейерса (эффективная серия).

0 голосов
/ 28 марта 2009

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

Вы также можете посмотреть в weak_ptr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...