成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++ module編程升級指南,子模塊與分區(qū)全解析

開發(fā) 前端
C++ 標準并沒有特別提到子模塊,但允許在模塊名稱中使用點(.),從而可以按任何你想要的層次結(jié)構(gòu)來組織模塊。

子模塊

1.C++ 標準與子模塊

C++ 標準并沒有特別提到子模塊,但允許在模塊名稱中使用點(.),從而可以按任何你想要的層次結(jié)構(gòu)來組織模塊。例如,以下是一個 DataModel 命名空間的示例:

export module datamodel;
import <vector>;

export namespace DataModel {
    class Person { /* ... */ };
    class Address { /* ... */ };
    using Persons = std::vector<Person>;
}

Person 和 Address 類都在 DataModel 命名空間內(nèi),也在 datamodel 模塊中。可以通過定義兩個子模塊來重構(gòu):datamodel.person 和 datamodel.address。

2.子模塊的模塊接口文件

datamodel.person 子模塊的模塊接口文件如下:

export module datamodel.person; // datamodel.person 子模塊
export namespace DataModel {
    class Person { /* ... */ };
}

datamodel.address 子模塊的模塊接口文件如下:

export module datamodel.address; // datamodel.address 子模塊
export namespace DataModel {
    class Address { /* ... */ };
}

最后,定義一個 datamodel 模塊如下。它導(dǎo)入并立即導(dǎo)出兩個子模塊。

export module datamodel; // datamodel 模塊
export import datamodel.person; // 導(dǎo)入并導(dǎo)出 person 子模塊
export import datamodel.address; // 導(dǎo)入并導(dǎo)出 address 子模塊
import <vector>;
export namespace DataModel {
    using Persons = std::vector<Person>;
}

當(dāng)然,子模塊中類的方法實現(xiàn)也可以放在模塊實現(xiàn)文件中。例如,假設(shè) Address 類有一個默認構(gòu)造函數(shù),僅打印一條語句到標準輸出;該實現(xiàn)可以放在一個名為 datamodel.address.cpp 的文件中:

module datamodel.address; // datamodel.address 子模塊
import <iostream>;
using namespace std;

DataModel::Address::Address() {
    cout << "Address::Address()" << endl;
}

3.使用子模塊的好處

用子模塊結(jié)構(gòu)化代碼的好處是,客戶端可以導(dǎo)入他們想要使用的特定部分,或者一次性導(dǎo)入所有內(nèi)容。例如,如果客戶端僅對使用 Address 類感興趣,以下導(dǎo)入聲明就足夠了:

import datamodel.address;

另一方面,如果客戶端代碼需要訪問 datamodel 模塊中的所有內(nèi)容,那么以下導(dǎo)入聲明是最簡單的:

import datamodel;

模塊分區(qū)

1.分區(qū)與子模塊的區(qū)別

分區(qū)和子模塊之間的區(qū)別在于,子模塊結(jié)構(gòu)對模塊的使用者是可見的,允許用戶選擇性地只導(dǎo)入他們想使用的子模塊。另一方面,分區(qū)用于內(nèi)部結(jié)構(gòu)化模塊,對模塊的使用者不可見。在模塊接口分區(qū)文件中聲明的所有分區(qū)最終必須由主要的模塊接口文件導(dǎo)出。一個模塊始終只有一個這樣的主模塊接口文件,即包含 export module 名稱聲明的接口文件。

2.創(chuàng)建模塊分區(qū)

模塊分區(qū)是通過將模塊名稱和分區(qū)名稱用冒號分隔來創(chuàng)建的。分區(qū)名稱可以是任何合法的標識符。例如,前一節(jié)中的 DataModel 模塊可以使用分區(qū)而不是子模塊來重構(gòu)。以下是 datamodel.person.cppm 模塊接口分區(qū)文件中的 person 分區(qū):

export module datamodel:person; // datamodel:person 分區(qū)
export namespace DataModel {
    class Person { /* ... */ };
}

3.分區(qū)的實現(xiàn)文件注意事項

使用分區(qū)時的一個注意事項是:與分區(qū)相結(jié)合的實現(xiàn)文件只能有一個文件具有特定的分區(qū)名稱。因此,以下聲明開始的實現(xiàn)文件是不正確的:

module datamodel:address;

相反,你可以將 address 分區(qū)的實現(xiàn)放在 datamodel 模塊的實現(xiàn)文件中:

module datamodel; // 不是 datamodel:address!
import <iostream>;
using namespace std;

DataModel::Address::Address() {
    cout << "Address::Address()" << endl;
}

警告:多個文件不能有相同的分區(qū)名稱。因此,擁有多個具有相同分區(qū)名稱的模塊接口分區(qū)文件是非法的,且分區(qū)文件中聲明的實現(xiàn)不能放在具有相同分區(qū)名稱的實現(xiàn)文件中。相反,應(yīng)該將這些實現(xiàn)放在模塊的實現(xiàn)文件中。

4.編寫分區(qū)模塊的要點

編寫分區(qū)結(jié)構(gòu)的模塊時,要記住的重要一點是,每個模塊接口分區(qū)最終必須由主模塊接口文件直接或間接導(dǎo)出。要導(dǎo)入分區(qū),只需指定分區(qū)名稱,前綴為冒號,例如 import :person。說 import datamodel:person 是非法的。請記住,分區(qū)對模塊的使用者不可見;分區(qū)只在模塊內(nèi)部結(jié)構(gòu)化。因此,用戶不能導(dǎo)入特定的分區(qū);他們必須導(dǎo)入整個模塊。分區(qū)只能在模塊內(nèi)部導(dǎo)入,因此在冒號前指定模塊名稱是多余的(且非法的)。

以下是 datamodel 模塊的主模塊接口文件:

export module datamodel; // datamodel 模塊(主模塊接口文件)
export import :person;   // 導(dǎo)入并導(dǎo)出 person 分區(qū)
export import :address;  // 導(dǎo)入并導(dǎo)出 address 分區(qū)
import <vector>;
export namespace DataModel {
    using Persons = std::vector<Person>;
}

5.使用分區(qū)結(jié)構(gòu)化的 datamodel 模塊

import datamodel;

int main() {
    DataModel::Address a;
}

注意:分區(qū)用于內(nèi)部結(jié)構(gòu)化模塊。分區(qū)在模塊外部不可見。因此,模塊的用戶不能導(dǎo)入特定分區(qū);他們必須導(dǎo)入整個模塊。早先提到,模塊名稱聲明隱含地包含一個導(dǎo)入名稱聲明。但對于分區(qū),情況并非如此。例如,datamodel:person 分區(qū)沒有隱含的 import datamodel 聲明。在這個例子中,甚至不允許在 datamodel:person 接口分區(qū)文件中添加顯式的 import datamodel 聲明。這樣做會導(dǎo)致循環(huán)依賴:datamodel 接口文件包含 import :person 聲明,而 datamodel:person 接口分區(qū)文件會包含 import datamodel 聲明。

實現(xiàn)分區(qū)

1.定義和用途

實現(xiàn)分區(qū)不需要在模塊接口分區(qū)文件中聲明,它也可以在模塊實現(xiàn)分區(qū)文件中聲明,這是一個帶有 .cpp 擴展名的普通源代碼文件,在這種情況下,它是一個實現(xiàn)分區(qū),有時也稱為內(nèi)部分區(qū)。這種分區(qū)不會被主模塊接口文件導(dǎo)出。例如,假設(shè)你有以下數(shù)學(xué)主模塊接口文件(math.cppm):

export module math; // math 模塊聲明
export namespace Math {
    double superLog(double z, double b);
    double lerchZeta(double lambda, double alpha, double s);
}

假設(shè)進一步數(shù)學(xué)函數(shù)的實現(xiàn)需要一些不能被模塊導(dǎo)出的輔助函數(shù)。實現(xiàn)分區(qū)是放置這些輔助函數(shù)的完美位置。以下在名為 math_helpers.cpp 的文件中定義了這樣的實現(xiàn)分區(qū):

module math:details; // math:details 實現(xiàn)分區(qū)
double someHelperFunction(double a) {
    return /* ... */;
}

2.實現(xiàn)分區(qū)的訪問

其他數(shù)學(xué)模塊實現(xiàn)文件可以通過導(dǎo)入這個實現(xiàn)分區(qū)來訪問這些輔助函數(shù)。例如,一個數(shù)學(xué)模塊實現(xiàn)文件(math.cpp)可能看起來像這樣:

module math;
import :details;

double Math::superLog(double z, double b) {
    return /* ... */;
}

double Math::lerchZeta(double lambda, double alpha, double s) {
    return /* ... */;
}

當(dāng)然,使用帶有輔助函數(shù)的這種實現(xiàn)分區(qū)只有在多個其他源文件使用這些輔助函數(shù)時才有意義。

責(zé)任編輯:趙寧寧 來源: coding日記
相關(guān)推薦

2023-12-25 22:24:36

C++模塊Module

2024-01-03 13:38:00

C++面向?qū)ο缶幊?/a>OOP

2024-02-28 09:57:30

C++類型強制轉(zhuǎn)換開發(fā)

2010-03-10 09:28:58

Visual Stud

2010-01-19 15:36:02

C++語言

2010-01-11 10:28:51

C++編程

2025-05-15 08:10:00

Vue 3.5Vue

2009-07-20 09:53:43

Java混合編程

2023-12-22 13:58:00

C++鏈表開發(fā)

2010-01-12 17:55:03

C++程序

2011-05-30 15:29:32

C++

2024-08-13 08:27:24

PythonTCP協(xié)議網(wǎng)絡(luò)編程

2024-04-09 08:57:25

SizeofC++字符串

2011-07-10 15:26:54

C++

2010-01-11 14:17:02

C++編程

2024-06-17 10:45:07

C++編程操作符

2011-07-01 14:55:28

Qt QML C++

2023-12-26 12:13:31

野指針C++編程

2025-05-13 08:25:00

模塊化編程JavaScript

2024-03-11 15:32:50

C++開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色毛片视频 | 国产欧美精品一区二区 | 日日天天 | 国产超碰人人爽人人做人人爱 | 精品一区二区三区四区视频 | 日本在线一区二区 | 国产在线一区二区三区 | 九九精品在线 | 欧美精品一区在线发布 | 久久91精品| 欧美成人不卡 | 一级毛片免费 | 日本久久www成人免 成人久久久久 | 91视频正在播放 | 免费毛片网站在线观看 | 亚洲欧美中文日韩在线v日本 | 国产福利在线播放 | 亚洲午夜在线 | 欧洲免费毛片 | 色婷婷av一区二区三区软件 | www.成人久久 | 国产91在线视频 | 欧美精品国产精品 | 九九99久久 | 男人的天堂avav | 日本精品视频 | 伊人欧美视频 | 亚洲成人观看 | 欧美成年网站 | 国产午夜精品一区二区三区 | www.国产精品 | 亚洲97| 神马久久春色视频 | 99精品久久久久久中文字幕 | 天堂va在线观看 | 国产婷婷色综合av蜜臀av | 尤物视频在线免费观看 | 国产激情精品一区二区三区 | 欧美精品一区在线发布 | 九九热在线观看视频 | 97久久久久久久久 |