首页 > 解决方案 > 命名空间参数的理想架构设计

问题描述

我有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::abcb::abcout::abc

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

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

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

我有不能修改头文件的限制。

标签: c++design-patternsarchitecture

解决方案


使用 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按预期输出。

https://www.ideone.com/pKltlP


推荐阅读