Подготовка к следующему стандарту С++

В вопросе, касающемся BOOST_FOREACH, я спрашиваю у пользователей библиотеки Boost, что (что-нибудь) они делают, чтобы подготовить свой код для переносимости к предлагаемому новому стандарту С++ (aka С++ 0x). Например, вы пишете такой код, если используете shared_ptr:

#ifdef CPPOX
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif

Также существует проблема с пространством имен - в будущем shared_ptr будет частью пространства имен std - как вы справляетесь с этим?

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

Не совсем поток ответов - означает ли это, что это не проблема? Во всяком случае, благодаря тем, кто ответил; Я принимаю jalfs ответ, потому что мне нравится, когда мне не советуют ничего не делать!

Ответы

Ответ 1

Простой ответ - "ничего не делать". Boost не собирается удалять библиотеки, которые были приняты в 0x. Таким образом boost:: shared_ptr все равно будет существовать. Поэтому вам не нужно ничего делать, чтобы поддерживать переносимость.

Конечно, как только 0x здесь, много кода можно упростить, очистить и оптимизировать, но поскольку он еще не существует, эта работа не может начаться. Все, что вы можете сделать, это убедиться, что ваш код будет компилироваться, когда 0x попадает... и он должен, просто так. Boost не собирается удалять половину своих библиотек. (Я не догадываюсь, они уже заявили об этом в своем списке рассылки)

(и если вы хотите перейти на стандартный shared_ptr, я бы сказал, что, возможно, проще просто выполнить простой поиск/заменить, когда придет время. Замените #include <boost/shared_ptr.hpp> на #include <memory> и boost::shared_ptr на std::shared_ptr)

Или, конечно же, вы можете просто решить, что проект будет продолжать использовать Boost shared_ptr. Просто потому, что он был добавлен в стандартную библиотеку, это не значит, что вы должны использовать его, в конце концов.

Ответ 2

Ничего не нужно делать из-за пространств имен. Если вы хотите использовать ускоренную реализацию, вы все равно будете использовать boost namespce.

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

Посмотрите мой предыдущий аналогичный вопрос здесь: что произойдет с перекрывающейся частью boost после того, как С++ 0x станет основным?

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

Ответ 3

Лучший способ использовать общие части между С++ 0x и Boost - использовать Boost.TR1, i.e; если Технический отчет уже принят. Boost.TR1 будет использовать реализацию, предоставленную компилятором, когда она будет доступна, и предоставленная Boost в противном случае. Это была основная цель Boost.TR1

"Библиотека TR1 предоставляет реализацию Технического отчета С++ для стандартных расширений библиотеки. Эта библиотека сама не реализует компоненты TR1, а представляет собой тонкую оболочку, которая будет включать реализацию стандартной библиотеки TR1 (если она есть) в противном случае он будет включать эквиваленты библиотеки Boost и импортировать их в пространство имен std:: tr1."

Ответ 4

Нет, мы пока не знаем, что:

  • поддержка С++ 0x еще не соответствует значению на разных платформах (нам нужно) и
  • что он еще не объявлен официально официально

Но да, мы используем Boost по мере необходимости (но, конечно, только после того, как релиз прошел этап санитарии, мы его используем), как и любая другая сторонняя библиотека, которую мы используем. Кроме того, мы используем исходную форму по мере необходимости.

Однако есть стремление к более строгому принятию принципов вождения на этапе проектирования продукта (например, move-ctor и т.д.).

Будет определенная работа, когда С++ 0x станет стандартизованным; но это также потребует от нас перехода к некоторым более новым компиляторам (vc10?) и переходу к новому компилятору всегда является его задачей.

Ответ 5

На самом деле вы всегда можете использовать версию Boost в течение длительного времени. Особенно, если вам нужно скомпилировать несколько платформ.

Библиотеки Boost переносятся и протестированы на нескольких платформах и ведут себя там же (большую часть времени).

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