c++ - 命名空间参数的理想架构设计

标签 c++ design-patterns architecture

我有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::abcb::abc) 映射到输出 (out::abc) .最简单的解决方案是为不同的命名空间编写两个单独的函数。

我想知道 dosomething 函数是否可以模板化

  1. 枚举值相同(枚举值的数量相同,例如都有 abc1、abc2)
  2. 枚举值不同(命名空间 b::abc::abc1 = 3,b::abc::abc2 = 4)
  3. 引入了新的枚举值(例如 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

https://www.ideone.com/pKltlP

关于c++ - 命名空间参数的理想架构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956523/

相关文章:

c++ - 分析 "invalid arc tag"(0x00000000)

c++ - 监听器类继承者 - 对监听类的 const 或非常量引用?

ios - 以编程方式在 UIPageViewController 中导航页面

c# - 架构:依赖注入(inject)、松散耦合的程序集、实现隐藏

c++ - 模板函数 roundTo int, float -> 截断

c++ - gcc 中 c++11 支持的官方状态

c++ - 将 std::move 与 std::shared_ptr 一起使用

javascript - 模型 -> 观察者 -> View -> Controller -> 模型 ->

带有枚举的 Java 工厂模式

node.js - 哪种技术可以与Cassandra以及NodeJS连接?