内容简介:文档列表见:通常,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引用外部符号的比较》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- macos – dyld:惰性符号绑定失败:未找到符号:_PQsetErrorContextVisibility
- 嵌入式C语言自我修养 09:链接过程中的强符号和弱符号
- Scala中的符号
- “Bug-O” 符号
- 简单理解符号执行技术
- GCC 符号表小结
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design systems
Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!