Как избежать дублирования кода при перегрузке оператора
Я перегружаю оператор :
void operator +=(pair<string, string> eng_rus) {
root = insert(eng_rus.first, eng_rus.second, root);
}
Но при этом мне так же надо перегрузить оператор ещё таким образом :
void operator +=(pair<char, string> eng_rus) {
string s;
s += eng_rus.first;
root = insert(s, eng_rus.second, root);
}
И тд. Каким образом я могу избежать дублирования кода, возможно ли это в данной ситуации?
Ответы (2 шт):
Я не вижу здесь дублирования кода. Если вся начинка вынесена в функцию insert, вы уже избавились от дублирования.
Вторую функцию можно немного сократить:
root = insert(std::string(1, eng_rus.first), eng_rus.second, root);
Так как в комментариях вы согласились с моим предложением, отвечу, что достаточно одного оператора:
void operator +=(pair<string, string> eng_rus) {
root = insert(eng_rus.first, eng_rus.second, root);
}
Который может корректно принимать все указанные вами типы входных данных:
<char,string>,<string,char>,<char,char>
Тоесть символьный тип char абсолютно спокойно можно интерпретировать как строку std::string, который может инициализироваться одним символом.
Таким образом убирается дублирование операторов принимающих все эти типы.
edit пример вызова
struct S
{
void operator += (const std::pair<std::string, std::string>& eng_rus) {
std::string s;
s += eng_rus.first;
//root = insert(s, eng_rus.second, root);
}
};
int main()
{
S s;
s += std::pair<std::string, std::string>(std::string(1, '1'), std::string(1, '2'));
return 0;
}