c++ - 在 C++ 中,可以重命名/别名非命名空间、非类名吗?

标签 c++ namespaces using-declaration

我有

namespace src {
   struct src_bar;
   void src_baz();
   template<class T> class src_qux;
}

我想引用为

namespace dst {
    struct dst_bar;
    void dst_baz();
    template<class T> class dst_qux;
}

意思是我想从 src 中“重命名”或“别名”或“重新标记”名称.

对于 dst_bar当然可以使用 namespace dst { typedef src_bar dst_bar; } .是否有一些(非宏)等效项允许我重命名 src::src_baz作为dst::dst_bazsrc::src_qux作为dst::dst_qux

除非我弄错了,using 都不是声明或 namespace 别名都无法完成其他两个。为 dst_baz() 编写模板转发函数是一种可能性,但需要了解 src_baz 的性质.模板 typedef 可能有 dst_qux<T>::typesrc_qux<T>但是间接增加了冗长。

FWIW,我的用例采用 C 名称,如 somepackage_someportion_somefuncA并提供命名空间友好的版本 somepackage::someportion::somefuncA这样其他人就可以雇用using somepackage::someportion为简洁起见。

最佳答案

对于功能,您必须手动转发请求。对于非模板类型,您可以直接使用 typedef。对于模板类型,你可以使用 c++11 的新特性 using 来为模板创建一个 typedef 风格的别名,如果你的编译器支持的话,否则你基本上就不走运了。

关于c++ - 在 C++ 中,可以重命名/别名非命名空间、非类名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090711/

相关文章:

Javascript 命名空间约定

c++ - 尝试通过 using-declaration 定义命名空间成员

g++ - [[已弃用]] 与 using 不兼容,但与 typedef 兼容

c++ - ld 无法链接到主可执行文件

php - 如何自动加载具有不同子命名空间的 Controller ?

c# - MSDN Crystal 报表教程中缺少 hierarchical_grouping 的 Using 指令

c++ - 使用声明的奇怪行为

c++ - 如何在我的 TreeView 中显示 +/- 图标?

c++ - cv::Mat 中的错误地址

c++ - 重载 << 运算符 : struct with vector of structs