Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

см. здесь boost tr1 для деталей

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

Ответ 2

#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif

Ответ 3

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

В качестве альтернативы, в g++ вы можете попробовать передать --std = gnu ++ 0x в командной строке. Это работает, по крайней мере, для < unordered_set > и < unordered_map > . Затем, чтобы сделать его доступным в std:: tr1:

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

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

Ответ 4

Возможно, это довольно хаки, но вы можете просто добавить каталог comp1 tr1 в свой путь include.

Ответ 5

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

Ответ 6

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