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

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

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

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

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

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

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

6 ответов


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

/ boost / tr1 / tr1

посмотреть здесь увеличить tr1 дополнительные сведения

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


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

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

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

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

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


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


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


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