Это стоящий использования станд.:: tr1 в производстве?

Я использую MS VC 2008 и для некоторых проектов компилятор Intel C ++ 11.0. Действительно ли стоит использовать tr1 функции в производстве? Они останутся в новом стандарте?

Например, теперь я использую stdext::hash_map. TR1 определяет std::tr1::unordered_map. Но в реализации MS unordered_map просто их stdext::hash_map, templatized в другом отношении.

6
задан flashnik 8 March 2010 в 12:30
поделиться

5 ответов

Мой совет - использовать псевдоним для пространства имен, содержащего элементы TR1, которые вы используете. Таким образом, вы сможете "перейти" от использования версии TR1 к стандартной версии, когда ваш компилятор будет ее поддерживать.

namespace cpp0x = std::tr1;

cpp0x::unordered_map<std::string, int> mymap;

для компилятора C++0x первая строка становится:

namespace cpp0x = std;

а остальное можно не трогать.

6
ответ дан 8 December 2019 в 05:21
поделиться

Да, все, что находится в tr1, останется там. останется там. Некоторые вещи будут приняты в std::, но они останутся в tr1 тоже. Так что ни один из ваших кодов не сломается, когда новый стандарт будет закончен.

Простите меня: нет, не сломаются. Как описано здесь:

В предложение были добавлены два примечания, чтобы дать понять пользователям, что при переходе от TR к будущим стандартам компоненты TR не останутся в пространстве имен std::tr1, а конфигурационные макросы исчезнут.

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

9
ответ дан 8 December 2019 в 05:21
поделиться

Для tr1::unordered_map имейте в виду, что существует множество различных реализаций хэш-карт, и что реализация, выбранная стандартом, является вполне классической... но может быть не самой эффективной для вашей конкретной задачи.

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

1
ответ дан 8 December 2019 в 05:21
поделиться

unordered_map будет в новом стандарте, hash_map не будет. Обратите внимание, что пространство имен tr1 также не является стандартным.

5
ответ дан 8 December 2019 в 05:21
поделиться

Подавляющее большинство библиотечного кода, который будет добавлен в C ++ 0x, уже довольно давно присутствует в Boost C ++ Libraries . Я настоятельно рекомендую использовать Boost (например, boost :: unordered_map ), поскольку он работает с очень большим количеством компиляторов ISO C ++ 1998 и будет продолжать работать (возможно, используя встроенную реализацию компилятора) на C + + 0x компиляторы. Кроме того, вам не нужно менять пространство имен - тогда как одобренные элементы в std :: tr1 будут перемещены в std - поскольку они всегда будут доступны в boost ::, и вам не придется беспокоиться о том, какие элементы tr1 вошли в стандарт. Короче говоря, Boost - это то, что вам нужно.

2
ответ дан 8 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: