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
26
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
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
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