C++與Rust引用外部符號(hào)的比較

文檔列表見(jiàn):Rust 移動(dòng)端跨平臺(tái)復(fù)雜圖形渲染項(xiàng)目開(kāi)發(fā)總結(jié) - 目錄

通常,C/C++通過(guò)#include導(dǎo)入外部符號(hào)(不考慮extern和前置聲明的情況)。Rust沒(méi)頭文件,由use導(dǎo)入外部符號(hào),類(lèi)似Java的import,但是Rust不用Java包名那種倒URL做法,而是采用了類(lèi)似C++命名空間的方案,通過(guò)mod聲明模塊來(lái)區(qū)別來(lái)自不同模塊或文件的符號(hào)。示例如下:

#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通過(guò)as關(guān)鍵字解決多個(gè)模塊中類(lèi)型重名問(wèn)題
use mod_1::MyStruct as Mod1MyStruct;
use mod_2::MyStruct as Mod2MyStruct;

當(dāng)C++包含兩個(gè)同名文件時(shí),需要帶上路徑進(jìn)行區(qū)分。多個(gè)命名空間中存在同名類(lèi)時(shí),每次使用都得用完整符號(hào)名進(jìn)行區(qū)分,即Namespace1::Namespace2::NamespaceN::MyClass,代碼比較頻繁。
Rust在處理這一問(wèn)題有更好的解決方案:as重命名避免沖突。

使用*導(dǎo)入所有符號(hào)雖然方便,但是會(huì)消耗更多編譯時(shí)間,因此枚舉當(dāng)前文件使用的符號(hào)是更好的實(shí)踐。

進(jìn)階:self關(guān)鍵字可導(dǎo)入mod.rs文件或者與上一次目錄同名的rs文件。示例如下:

// 此處self表示rc.rs,因?yàn)閞c模塊內(nèi)部沒(méi)切成多個(gè)目錄組織源碼
use std::rc::{self, Rc, Weak}; 
// 此處self表示rc目錄下的mod.rs文件
use std::io::{self, Read, Write};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容