Typedef klasa szablonu bez określania parametrów szablonu

Próbuję wpisać unordered_map lub std:: map w zależności od tego, czy są dostępne biblioteki TR1. Ale nie chcę określać parametrów szablonu. Z tego co do tej pory czytałem, pisanie szablonów bez argumentów nie jest możliwe dopóki nie będzie dostępny oficjalny standard c++0x. Czy ktoś zna jakieś eleganckie obejście tego problemu?

#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
Author: Rollin_s, 2009-09-25

2 answers

Sposób, w jaki to zrobiłem, to zawinięcie typedef w strukturę szablonu:

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łujesz go tak:

myMap<key, value>::type myMapInstance;

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

 37
Author: fbrereto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-25 18:51:59

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

Zamiast tego użyj makra #define.

 4
Author: ebo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 22:11:51