我有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)
枚举,我使用 switch 语句简单地将输入从 (a::abc
或 b::abc
) 映射到输出 (out::abc
) .最简单的解决方案是为不同的命名空间编写两个单独的函数。
我想知道 dosomething
函数是否可以模板化
- 枚举值相同(枚举值的数量相同,例如都有 abc1、abc2)
- 枚举值不同(命名空间 b::abc::abc1 = 3,b::abc::abc2 = 4)
- 引入了新的枚举值(例如 b::abc::abc3)
这将避免代码重复并使设计可扩展。
我有不能修改头文件的限制。
最佳答案
使用 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
。
关于c++ - 命名空间参数的理想架构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956523/