Как включить TR1?
-
22-07-2019 - |
Вопрос
У разных компиляторов разные представления о TR1. G ++, кажется, принимает только включения типа:
#include <tr1/unordered_map>
#include <tr1/memory>
...
Пока компилятор Microsoft принимает только:
#include <unordered_map>
#include <memory>
...
Насколько я понимаю, TR1 - правильный путь Microsoft.
Есть ли способ заставить G ++ принять вторую версию? Как вообще можно обращаться с TR1 переносимым способом?
Решение
Установите буст на своей машине.
Добавьте следующий каталог в путь поиска.
< Boost Install Directory > / boost / tr1 / tr1
см. здесь повысить tr1 для получения подробной информации. р>
Теперь, когда вы включаете < memory > вы получаете версию памяти tr1, которая имеет std :: tr1 :: shared_ptr, а затем включает платформенную версию < memory > чтобы получить все нормальные вкусности. Р>
Другие советы
#ifdef _WIN32
#include <unordered_map>
#include <memory>
#else
#include <tr1/unordered_map>
#include <trl/memory>
#endif
Возможно, лучшим способом было бы просто использовать библиотеки повышения на данный момент, поскольку во многих случаях у них есть альтернативы с Интерфейс похож на TR1 и находится в другом (но непротиворечивом) пути заголовка и пространстве имен Это дает преимущество работы с компиляторами, которые даже не начали реализовывать C ++ 0x. И есть много полезных библиотек наддува, которых нет в TR1 вообще:)
С другой стороны, в G ++ вы можете попробовать передать --std = gnu ++ 0x в командной строке. Это работает для & Lt; unordered_set & Gt; и < unordered_map >, по крайней мере. Затем сделать его доступным в std :: tr1:
namespace std { namespace tr1 { using namespace std; } }
Это зло, естественно. Я настоятельно рекомендую вместо этого повысить подход:)
Возможно, это немного странно, но вы можете просто добавить каталог компилятора tr1 в путь включения.
Если под Windows, добавьте каталог 'tr1' в системный путь. Тогда #include <memory>
должно работать.
Я задал себе тот же вопрос. К сожалению, в техническом отчете не указано, как следует включать заголовки. Он только определяет, что расширения должны быть в пространстве имен :: std :: tr1.