我有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
函数是否可以模板化
这将避免代码重复并使设计可扩展。
我有不能修改头文件的约束。
答案 0 :(得分:0)
使用static_cast
完全可以,您根本不需要单独的功能:
a::abc A = a::abc2;
b::abc B = b::abc3;
a::abc A2 = static_cast<a::abc>(B);
cout << A << " " << A2 << " " << B;
按预期输出2 3 3
。