С текущей версией C ++ (C ++ 03) действительно нет хорошего способа сделать это.Вы можете попробовать что-то вроде
#define StringHashMap(type) stdext::hash_map<std::string, type, CStringHasher>
Но тогда у вас возникнут проблемы, если вы попытаетесь указать тип шаблона с запятой в нем, например:
StringHashMap(pair<int, string>) myMap; // Error!
Это не удается, потому чтопрепроцессор маркирует это как
StringHashMap((pair<int), (string>)) myMap; // Error!
, что не то, что вы хотите.Если вы не собираетесь делать что-то подобное, все будет в порядке.В качестве альтернативы вы можете использовать typedef
s, чтобы обойти это:
typedef pair<int, int> IntPair;
StringHashMap(IntPair) myMap; // Okay
Если вы разрешаете использовать функции C ++ 0x, вы можете использовать шаблон, используя объявление, как здесь:
template <typename T>
using StringHashMap = stdext::hash_map<std::string, T, CStringHasher>;
К сожалению, в C ++ 03 нет функции «template typedef», подобной этой, поэтому вам придется использовать более новый компилятор и не будет столь же хорошей гарантии переносимости.
Эй, подожди минутку!Меня зовут templatetypedef
, и я впервые в «Переполнении стека» написал эту фразу в ответе!Ты только что сделал мою ночь.: -)