Какие библиотеки Boost используют преимущества семантики Move

Ссылки Rvalue и семантика Move - основная функция С++ 11, которая может значительно ускорить работу кода за счет сокращения ненужных копий. STL был обновлен, чтобы использовать эту новую функцию, когда используется компилятор С++ 11/0x (например, gcc 4.6)

Boost 1.48 представила новую библиотеку для эмуляции семантики перемещения на старых компиляторах С++ 03. Эта библиотека работает, вводя макросы, которые расширяются до истинных ссылок rvalue, когда код компилируется с компиляторами С++ 11 или эмулированными ссылочными номерами rvalue при компиляции кода с компиляторами С++ 03.

Помимо boost::container, обновлена ​​ли какая-либо из других библиотек boost, чтобы использовать семантику перемещения?

Есть ли подробное описание дорожной карты, когда/если семантика перемещения будет добавлена ​​в другие библиотеки boost?

boost::multi_index_container упомянул добавление семантики перемещения на Boost.MultiIndex Будущая работа, так как она была введена в версии 1.31.

Ответ 1

Как вы сказали в вопросе, boost 1.48 представил boost::move, библиотеку, которая эмулирует семантику перемещения с С++ 03. Это было разработано Ион ​​Газтанага, который также (главным образом) писал и в настоящее время поддерживает boost::intrusive и boost::container.

Как наследование, так и поддержка контейнера перемещают семантику - на самом деле boost::intrusive должна поддерживать семантику перемещения для boost::container to, потому что boost::container - это в основном куча неинтрузивных контейнеров, реализованных путем обертки их копий boost::intrusive. Мне кажется, что интрузивные/контейнеры были мотивацией для написания boost::move, поэтому неудивительно, что у них есть голова на остальной основе.

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

Повышение 1.48/1.49/1.50/1.51/1.52 примечания к выпуску - лучшее место для поиска твердых ответов:

  • Boost.Interprocess имеет поддержку с 1.45, как С++ 11, так и С++ 03. До 1.48 это содержало код, который стал boost.move.
  • Boost.Asio имеет поддержку с 1.47; нет эмуляции в С++ 03
  • Boost.Intrusive получил поддержку через boost.move в 1.48 (С++ 11, С++ 03)
  • Boost.Container был новым в 1.48 с поддержкой через boost.move(С++ 11, С++ 03)
  • Boost.Icl получил поддержку через boost.move в 1.49 (С++ 11, С++ 03)
  • Boost.Unordered получил поддержку через boost.move в 1.49 (С++ 11, с #define, чтобы включить эмуляцию в С++ 03)
  • Boost.Thread поддерживает эмуляцию С++ 03 с boost.move с 1.50, более старые версии поддерживают только С++ 11
  • Boost.Function добавлена ​​поддержка только С++ 11 в 1.52