我有
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_baz
和 src::src_qux
作为dst::dst_qux
?
除非我弄错了,using
都不是声明或 namespace 别名都无法完成其他两个。为 dst_baz()
编写模板转发函数是一种可能性,但需要了解 src_baz
的性质.模板 typedef 可能有 dst_qux<T>::type
是src_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/