У меня есть 3 заголовочных файла
// a1.h
namespace a
{
enum abc:uint8
{
abc1 = 1
abc2 = 2
};
}
// a2.h
namespace b
{
enum abc:uint8
{
abc1 = 1
abc2 = 2
abc3 = 3
};
}
// out.h
namespace out
{
enum abc:uint8
{
abc1 = 1
abc2 = 2
abc3 = 3
};
}
Я хочу применить некоторую операцию dosomething(a::abc, &out::abc)
или dosomething(b::abc, &out::abc)
к перечислению, где я просто сопоставляю ввод из (a::abc
или b::abc
) с выводом(out::abc
) используя операторы switch.Самым простым решением было бы написать две отдельные функции для разных пространств имен.
Мне интересно, можно ли шаблонизировать функцию dosomething
, учитывая, что
- Значения перечисления одинаковы (количество значений перечисления одинаково, например, все имеют abc1, abc2)
- Значения перечисления различны (пространство имен b :: abc :: abc1 = 3, b :: abc :: abc2 = 4)
- Введено новое значение перечисления (например, b :: abc :: abc3)
Это позволило бы избежать дублирования кода и сделать проект расширяемым.
У меня есть ограничение, что я не могу изменять заголовочные файлы.