2009-09-24 15 views
26

Próbuję wpisać albo w mapę nieuporządkowaną, albo std :: map, w zależności od tego, czy dostępne są biblioteki TR1. Ale nie chcę określać parametrów szablonu. Z tego, co przeczytałem do tej pory, typowanie szablonów bez argumentów nie jest możliwe, dopóki nie będzie dostępny oficjalny standard C++ 0x. Więc czy ktoś zna to eleganckie rozwiązanie?Typedef klasa szablonu bez określania parametrów szablonu

#ifdef _TR1 
#include <unordered_map> 
typedef std::tr1::unordered_map MyMap; //error C2976: too few template arguments 
#else 
#include <map> 
typedef std::map MyMap; //error C2976: too few template arguments 
#endif 
+0

Zobacz to bardzo bliskie pytanie: http://stackoverflow.com/questions/544842/c-typedef-ing-stl i odpowiedzi. Szablon typedefs nie jest prawidłowy Polecenia C++ –

+1

Benoit - Dzięki, to właśnie to, czego szukałem –

+0

Bardzo podobne pytanie: http://stackoverflow.com/questions/6907194/how-to-typedef-a-template-class Ma inny odpowiedź, o której tu nie wspomniano: "szablon aliasu" w C++ 11 – Jayesh

Odpowiedz

36

Sposób Widziałem to zrobić, to owinąć typedef w szablonie-struct:

template<typename KeyType, typename MappedType> 
struct myMap 
{ 
#ifdef _TR1 
    typedef std::tr1::unordered_map<KeyType, MappedType> type; 
#else 
    typedef std::map<KeyType, MappedType> type; 
#endif 
}; 

Następnie w kodzie wywołać ją tak:

myMap<key, value>::type myMapInstance; 

Może być trochę bardziej gadatliwy niż to, co chcesz, ale wierzę, że spełnia on potrzeby, biorąc pod uwagę obecny stan C++.

+3

To jest rzeczywiście zwykły sposób symulacji braku szablonu typedefs w C++. Jednak nazwałbym typedef "type" zamiast "value", wydaje się bardziej poprawny semantycznie i jest bardziej idiomatyczny. –

+1

Kod zaktualizowany, dziękuję – fbrereto

4

Musisz użyć pełnych typów dla typedefs.

Zamiast tego użyj makra #define.

+1

Czasami najlepiej jest powrócić do dawnych sposobów. Programowanie taśm klejących w najlepszym wydaniu. –

+4

Niestety makra nie szanują zakresu. – sellibitze

Powiązane problemy