Как избежать дублирования кода при перегрузке оператора

Я перегружаю оператор :

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 шт):

Автор решения: HolyBlackCat

Я не вижу здесь дублирования кода. Если вся начинка вынесена в функцию insert, вы уже избавились от дублирования.


Вторую функцию можно немного сократить:

root = insert(std::string(1, eng_rus.first), eng_rus.second, root);
→ Ссылка
Автор решения: ampawd

Так как в комментариях вы согласились с моим предложением, отвечу, что достаточно одного оператора:

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;
}
→ Ссылка