Я хочу сделать функцию, которая может обрабатывать разные вещи, зависит от типа все в одном.
Я знаю, что перегрузка - отличное решение для этого. Точно так же,
class C1 {...};
class C2 {...};
void handle(C1& c1){...}
void handle(C2& c2){...}
Но в режиме перегрузки существует много дублированных кодов, так как эти две инициализации одинаковы. Вот почему я хочу объединить их.
У меня есть некоторые идеи для моей цели. Например,
class C1 {...};
class C2 {...};
void handle_C1(C1 &c1);
void handle_C2(C2 &c2);
template<typename T>
void handle(T &content){
// Initialization was done here
if (std::is_same(C1, T))
handle_C1(content);
if (std::is_same(C2, T))
handle_C2(content);
}
Ошибка компиляции была обнаружена ошибкой, что параметры_сочетания handle_C2, поскольку тип параметра handle_C2 - это C2, когда я вызываю
C1 c1;
handle_C1<C1>(c1);
Согласно SFINAE в С++, я ожидаю, что компилятор проигнорирует эту подстановку, но это не так.
Есть ли кто-нибудь, кто может дать мне совет?
Является лучшим решением для перегрузки? если это правда, как я могу уменьшить свой дублированный код.