Мы создаем объект с именем hm3.Это класс hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > >
.Он (класс) является шаблоном класса hash_map, и этот шаблон принимает два параметра - два имени класса.Первый - MyStr.Второй - шаблонная функция hash_compare <MyStr, less_str >
.Этот (второй) шаблон принимает также два параметра.Они MyStr
класса и что-то называется less_str
.
Почему такой шаблон?Полагаю, первым параметром hash является контейнер элемента.Второй - это функция для сравнения таких контейнеров.
Add: И о конструкторе: он принимает результат функции шаблона smt hash_compare <MyStr, less_str > (void)
и некоторый объект.
Add2: Может быть показанкак это:
typedef hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > > Someclass;
Someotherclass var = hash_compare <MyStr, less_str > (); // `var` is what this function returned
Someclass hm3( var, hm1_Alloc );