Как включить TR1?
У разных компиляторов, похоже, есть разные идеи о TR1. g++, похоже, только включает в себя следующие типы:
#include <tr1/unordered_map>
#include <tr1/memory>
...
В то время как компилятор Microsoft только принимает:
#include <unordered_map>
#include <memory>
...
Как я понимаю TR1, путь Microsoft правильный.
Есть ли способ заставить g++ принять вторую версию?
Как вообще можно управлять TR1 портативным способом?
Ответы
Ответ 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.