C ++:在程序逻辑/条件命名空间中使用命名空间?

时间:2013-04-18 14:09:03

标签: c++ namespaces

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

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();

,它不会在命名空间别名分配行中使用错误进行编译。

有没有其他方法可以做到这一点/普遍接受的处理这种情况的干净方式是什么?

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

1 个答案:

答案 0 :(得分:2)

无法执行此类命名空间别名。

3.4.6使用指令和命名空间别名[basic.lookup.udir] 1在using-directive或namespace-alias-definition中,查找名称空间名称或名称中的名称 仅考虑嵌套名称说明符的名称空间名称。

您使用partial template specialization来解决此问题。