这是一个技术问题以及(如果技术上可行)一个风格问题。在我的代码中,我有一系列加载和操作文件的函数。对于不同的语法,这些函数存在于不同的命名空间中,因此:
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();
,它不会在命名空间别名分配行中使用错误进行编译。
有没有其他方法可以做到这一点/普遍接受的处理这种情况的干净方式是什么?
我认为每个文件类型的虚拟类和继承都是一个选项。还有其他人吗?
答案 0 :(得分:2)
无法执行此类命名空间别名。
3.4.6使用指令和命名空间别名[basic.lookup.udir] 1在using-directive或namespace-alias-definition中,查找名称空间名称或名称中的名称 仅考虑嵌套名称说明符的名称空间名称。
您使用partial template specialization来解决此问题。