c++ - 命名空间参数的理想架构设计
问题描述
我有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
};
}
我想在枚举上应用一些操作,我只是使用 switch 语句将输入从 ( 或 ) 映射dosomething(a::abc, &out::abc)
到输出( ) 。最简单的解决方案是为不同的命名空间编写两个单独的函数。dosomething(b::abc, &out::abc)
a::abc
b::abc
out::abc
我想知道这个dosomething
函数是否可以模板化
- 枚举值相同(枚举值的数量相同,例如都有 abc1、abc2)
- 枚举值不同(命名空间 b::abc::abc1 = 3, b::abc::abc2 = 4)
- 引入了新的枚举值(例如 b::abc::abc3)
这将避免代码重复并使设计可扩展。
我有不能修改头文件的限制。
解决方案
使用 a 非常可行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
按预期输出。
推荐阅读
- r - 在 R studio 中总结数据时遇到问题
- python - 如何在特殊字符周围使用 \b 边界
- python - 根据最近的小时和日期选择行
- sql-server - 找不到 SQL Server 配置管理器
- uuid - Laravel 8 Fortify 用户 UUID 登录问题
- reactjs - 在数组 React 中收集数组的唯一值
- amazon-web-services - AWS DynamoDB - 免费套餐混淆
- python - 使用颜色图图例绘制条形图
- c++ - `auto` 和 `std::any` 有什么区别?
- botframework - 使用 botframework cli 工具创建的 Dispatch 模型中是否丢失了 LUIS 模型特征?