Подготовка к следующему стандарту C ++ - PullRequest
15 голосов
/ 04 апреля 2009

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

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

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

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

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

Ответы [ 5 ]

14 голосов
/ 04 апреля 2009

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

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

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

Или, конечно, вы можете просто выбрать проект, который вы собираетесь использовать, используя Boost's shared_ptr. То, что он был добавлен в стандартную библиотеку, вовсе не означает, что у вас есть , чтобы его использовать.

2 голосов
/ 01 мая 2010

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

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

2 голосов
/ 04 апреля 2009

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

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

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

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

1 голос
/ 07 апреля 2009

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

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

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

1 голос
/ 04 апреля 2009

Нет, мы пока не делаем, учитывая факты, которые:

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

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

Тем не менее, предпринимаются усилия для более строгого принятия основных принципов на этапе разработки продукта (например, move-ctor и т. Д.).

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

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