Вопрос

У разных компиляторов разные представления о 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top