在程序逻辑/条件命名空间中使用命名空间

C++: Use of namespaces in program logic / conditional namespaces?

本文关键字:命名空间 条件 程序      更新时间:2023-10-16

这是一个技术问题,也是一个风格问题(如果技术上可行的话)。在我的代码中,我有一系列加载和操作文件的函数。对于不同的语法,这些函数存在于单独的名称空间中,因此:

namespace typeA {
  void load();
  void manipulate();
};
namespace typeB {
  void load();
  void manipulate();
};

在这个最小的示例中,显然我可以简单地使用一个子句来检查文件类型,然后根据需要调用typeA:load()和typeB:load()等。

然而,我想知道是否也可以使用名称空间别名来做到这一点?这将使代码更清晰,因为在命名空间中有几十个函数调用,所有调用都需要单独的if/else子句。

我试过了:

namespace my_type = (ft == "type_A") ? typeA : typeB;
...
my_type::load();

编译时不会在命名空间别名分配行出现错误。

是否有其他的方法来做这件事/什么是普遍接受的干净的方式来处理这种情况?

我认为每个文件类型的虚拟类和继承将是一种选择。还有其他的吗?

没有办法做这样的命名空间别名。

3.4.6使用指令和命名空间别名[basic.lookup.udir]在using指令或名称空间别名定义中,查找名称空间名称或中的名称时嵌套名称说明符只考虑名称空间名称。

你可以使用部分模板专门化来解决这个问题。