TR1 от Boost или VC10 - какой из них лучше? - PullRequest
5 голосов
/ 18 августа 2010

В настоящее время я перехожу с Visual Studio 2008 на 2010. В моем программном обеспечении активно используются Boost и его функции TR1. Теперь я получаю много ошибок компилятора, потому что VC10 имеет собственную реализацию TR1.

Я знаю, что могу отключить реализацию Microsoft TR1 с помощью переключателя _HAS_CPP0X (см. здесь ), но я не уверен, отключит ли это также другие функции, которые могут быть интересны в будущем.

Итак, мне интересно, какая из реализаций TR1 лучше: та, что от Boost, или та, что от Microsoft? Есть ли какие-либо различия? Есть ли у отключения реализации Microsoft какие-либо недостатки?

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Если ваш код не компилируется со стандартной библиотекой VC10, это может указывать на то, что он не соответствует стандарту. Стандартная библиотека в VC10 исходит от Dinkumware, и эти парни неплохи в реализации стандартной библиотеки. (PJP раньше был председателем рабочей группы lib.) Я очень внимательно изучил каждую проблему, прежде чем отклонить ее как специфичную для VC проблему, чтобы не оказаться несовместимым с будущим.

Кроме того, TTBOMK, VC10 поставляется не только с TR1, но и с C ++ 1x (например, std::shared_ptr вместо std::tr1::shared_ptr; ICBWT), поэтому библиотеки boost и VC10 на самом деле не полностью сопоставимы.

0 голосов
/ 17 августа 2013

Первое из:
Вы должны быть в состоянии использовать Boost и TR1 рядом. Если все настроено правильно и вы не возитесь с using namespace, вы не получите никаких ошибок.

C ++ 11 предоставляет такие функции, как ключевое слово auto ( дополнительная информация ) или инициализация атрибутов класса во время их объявления ( дополнительная информация ), которые Повышение не может обеспечить.

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

Когда речь идет о функциях, которые оба предоставляют (например, shared_ptr ), я бы рекомендовал использовать Boost:

  • Повышение компиляции с помощью компиляторов, которые не поддерживают определенные функции C ++ 11
  • У вас есть четкая зависимость вместо простой передачи на C ++ 11 (которую большинство компиляторов реализуют по-разному)
  • Типы данных Boost (например, shared_ptr) совместимы с другими функциями Boost, такими как serialization .

Мое предложение - использовать C ++ 11, только если он вам абсолютно необходим, и Boost во всех остальных случаях.

...