内容简介:文档列表见:通常,C/C++通过当C++包含两个同名文件时,需要带上路径进行区分。多个命名空间中存在同名类时,每次使用都得用完整符号名进行区分,即Namespace1::Namespace2::NamespaceN::MyClass,代码比较频繁。 Rust在处理这一问题有更好的解决方案:
文档列表见: Rust 移动端跨平台复杂图形渲染项目开发系列总结(目录)
通常,C/C++通过 #include
导入外部符号(不考虑 extern
和前置声明的情况)。Rust没头文件,由 use
导入外部符号,类似 Java 的 import
,但是Rust不用Java包名那种倒URL做法,而是采用了类似C++命名空间的方案,通过 mod
声明模块来区别来自不同模块或文件的符号。示例如下:
#include "OpenGLES/ES2/gl.h" #include "Framebuffer.h" use namespace my_package_1::ClassHello; use namespace my_package_2::ClassWorld; 复制代码
use OpenGLES::ES2::gl::*; use Framebuffer::*; // Rust通过as关键字解决多个模块中类型重名问题 use mod_1::MyStruct as Mod1MyStruct; use mod_2::MyStruct as Mod2MyStruct; 复制代码
当C++包含两个同名文件时,需要带上路径进行区分。多个命名空间中存在同名类时,每次使用都得用完整符号名进行区分,即Namespace1::Namespace2::NamespaceN::MyClass,代码比较频繁。
Rust在处理这一问题有更好的解决方案: as
重命名避免冲突。
使用 *
导入所有符号虽然方便,但是会消耗更多编译时间,因此枚举当前文件使用的符号是更好的实践。
进阶: self
关键字可导入mod.rs文件或者与上一次目录同名的rs文件。 示例如下:
// 此处self表示rc.rs,因为rc模块内部没切成多个目录组织源码
use std::rc::{self, Rc, Weak};
// 此处self表示rc目录下的mod.rs文件
use std::io::{self, Read, Write};
复制代码
以上所述就是小编给大家介绍的《C++与Rust引用外部符号的比较》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建高可用Linux服务器
余洪春 / 机械工业出版社华章公司 / 2011-11-1 / 79.00元
资深Linux/Unix系统管理专家兼架构师多年一线工作经验结晶,51CTO和ChinaUnix等知名社区联袂推荐。结合实际生产环境,从Linux虚拟化、集群、服务器故障诊断与排除、系统安全性等多角度阐述构建高可用Linux服务器的最佳实践。本书实践性非常强,包含大量企业级的应用案例及相应的解决方案,读者可以直接用这些方案解决在实际工作中遇到的问题。 全书一共10章。第1章以作者的项目实践为......一起来看看 《构建高可用Linux服务器》 这本书的介绍吧!