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

时间:2019-03-02 08:12:51

标签: 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),在这里我只需将(a::abcb::abc)的输入映射到输出(out::abc )使用switch语句。最简单的解决方案是为不同的命名空间编写两个单独的函数。

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

  1. 枚举值相同(枚举值的数量相同,例如都具有abc1,abc2)
  2. 枚举值不同(命名空间b :: abc :: abc1 = 3,b :: abc :: abc2 = 4)
  3. 引入了新的枚举值(例如b :: abc :: abc3)

这将避免代码重复并使设计可扩展。

我有不能修改头文件的约束。

1 个答案:

答案 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

https://www.ideone.com/pKltlP