0

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

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

它不会在命名空间别名分配行中出现错误。

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

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

4

1 回答 1

2

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

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

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

于 2013-04-18T14:12:32.477 回答