Как включить TR1? - PullRequest
       65

Как включить TR1?

28 голосов
/ 04 августа 2009

У разных компиляторов разные представления о TR1. G ++, кажется, принимает только включения типа:

#include <tr1/unordered_map>
#include <tr1/memory>
...

Пока компилятор Microsoft принимает только:

#include <unordered_map>
#include <memory>
...

Насколько я понимаю, TR1 - правильный путь Microsoft.

Есть ли способ заставить G ++ принять вторую версию? Как вообще можно обращаться с TR1 портативно?

Ответы [ 6 ]

16 голосов
/ 04 августа 2009

Установите буст на своей машине.
Добавьте следующий каталог в ваш путь поиска.

<Каталог установки Boost> / boost / tr1 / tr1

см. Здесь Boost TR1 для деталей

Теперь, когда вы включаете , вы получаете версию памяти tr1, которая имеет std :: tr1 :: shared_ptr, а затем она включает версию для конкретной платформы, чтобы получить все нормальные вкусности.

13 голосов
/ 16 июля 2010
#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif
4 голосов
/ 04 августа 2009

Возможно, лучшим способом было бы сейчас просто использовать boost библиотеки, поскольку во многих случаях они имеют альтернативы с интерфейсом, аналогичным функциям TR1, и просто находятся в другом (но последовательном) пути заголовка и пространство имен. Это имеет преимущество работы с компиляторами, которые даже не начали с реализацией C ++ 0x. И есть множество полезных буст-библиотек, которых нет в TR1 вообще:)

С другой стороны, в G ++ вы можете попробовать передать --std = gnu ++ 0x в командной строке. Это работает как минимум для и . Затем сделать его доступным в std :: tr1:

namespace std { namespace tr1 { using namespace std; } }

Это зло, естественно. Я настоятельно рекомендую вместо этого повысить подход:)

3 голосов
/ 04 августа 2009

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

2 голосов
/ 21 сентября 2009

Я задал себе тот же вопрос. К сожалению, в техническом отчете не указано, как следует включать заголовки. Он только определяет, что расширения должны быть в пространстве имен :: std :: tr1.

2 голосов
/ 04 августа 2009

Если под Windows, добавьте каталог 'tr1' в системный путь. Тогда #include <memory> должно работать.

...