После некоторых проб и множества ошибок я пришел к выводу, что это не очень полезно для операторов шаблонов. Как пример:
class TemplateClass
{
//Generalized template
template<TType>
TType& operator[](const std::string& key)
{
return TType;
}
//Specialized template for int
template<>
int& operator[]<int>(const std::string& key)
{
return 5;
}
//Specialized template for char
template<>
char& operator[]<char>(const std::string& key)
{
return 'a';
}
}
int main()
{
TemplateClass test;
//this will not match the generalized template.
test["test without template will fail"];
//this is not how you call an operator with template.
test<char>["test with template will fail"];
//this works!
test.operator[]<int>["test will work like this"];
return 0;
}
Так что создавать оператор с шаблоном довольно некрасиво (если вы не разбираетесь в подробностях, а кто на самом деле?) Вот почему я использовал функцию «get» вместо операторов. Мой вопрос, почему уродство? Почему необходимо включить ключевое слово оператора. Я предполагаю, что это связано с некоторой внутренней магией преобразования операторов, чтобы не использовать скобки для получения аргументов, и есть ли способ обойти это? Заранее спасибо.