Pergunta

Diferentes compiladores parecem ter idéias diferentes sobre TR1. G ++ só parece aceitar inclui do tipo:

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

Enquanto compilador Microsofts só aceita:

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

Quanto a como eu entendo TR1, a forma como a Microsoft é a correta.

Existe uma maneira de obter G ++ para aceitar a segunda versão? Como é que um em punho geral TR1 de uma forma portátil?

Foi útil?

Solução

Instale impulso em sua máquina.
Adicione o seguinte diretório para seu caminho de pesquisa.

/ boost / TR1 / TR1

impulso tr1 para detalhes

Agora, quando você incluir você obter a versão tr1 de memória que tem std :: tr1 :: shared_ptr e, em seguida, ele inclui a versão plataforma específica de para obter todos os presentes normais.

Outras dicas

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

Talvez a melhor forma seria a de simplesmente usar impulso bibliotecas, por agora, como em muitos casos eles têm alternativas com um interface semelhante ao TR1 apresenta, e são apenas em um diferente (mas consistente) caminho cabeçalho e namespace. Isto tem a vantagem de trabalhar em compiladores que ainda nem começaram implementação C ++ 0x. E há uma abundância de impulsionar bibliotecas úteis que não estão em TR1 em tudo:)

Como alternativa, no G ++, você pode tentar passar --std = gnu ++ 0x na linha de comando. Isso funciona para e , pelo menos. Em seguida, para torná-lo disponível em std :: tr1:

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

Este é o mal, naturalmente. Eu recomendo a abordagem impulso em vez disso:)

Um pouco hacky, talvez, mas você pode simplesmente adicionar o diretório tr1 compilador para o seu caminho de inclusão.

Se no Windows, adicionar o diretório 'tr1' para o caminho do sistema. Então #include <memory> deve funcionar.

Perguntei-me a mesma pergunta. Infelizmente, o relatório técnico não diz como os cabeçalhos devem ser incluídos. Ele apenas define que as extensões devem estar na :: std :: tr1 namespace.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top