Como é que se incluem TR1?
-
22-07-2019 - |
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?
Solução
Instale impulso em sua máquina.
Adicione o seguinte diretório para seu caminho de pesquisa.
impulso tr1 para detalhes
Agora, quando você incluir
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
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.