最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【C/C++進(jìn)階】宏函數(shù)實(shí)用指南

2023-06-07 12:28 作者:雙笙子佯謬  | 我要投稿

雖然模板取代了一部分宏函數(shù)的市場[星塵_啦啦啦]但是還有很多模板覆蓋不到的地方[未來有你_酸了]不論是骨哥test[鹿乃桜帆_呆呆]骨哥benchmark[洛天依_啊!]zeno[星塵_震驚]boost[雪未來_賴床]openvdb[Akie秋繪_傲嬌]都大量使用了宏函數(shù)來簡化書寫[雪未來_打氣]

例如經(jīng)典的骨哥test測試用例定義方法[未來有你_酸了]

TEST(mycase) {

?EXPECT_EQ(2 + 2, 5);

}

有沒有想過這里的TEST是怎么實(shí)現(xiàn)的呢[星塵的新年祝福_嘿嘿]才能讓后面緊跟著的塊變成函數(shù)體[未來有你_SOS]這里的TEST(mycase)可能會展開成這樣[星塵_給你星星](僅供學(xué)習(xí)演示[星塵_酸]實(shí)際以骨哥源碼為準(zhǔn))[未來有你_生悶氣]

static void mycase(); // 前向聲明

static int mycase_reghelper = (g_casemap.emplace(“mycase”, mycase), 0); // 靜態(tài)初始化注冊,reghelper變量無意義,僅用于保證emplace這段代碼在main前執(zhí)行

static void mycase() // TEST(mycase)展開結(jié)束,由于你后面緊跟著{}所以會變成mycase函數(shù)的函數(shù)體,此后骨哥test在運(yùn)行main的時(shí)候,就會遍歷g_casemap里的測試用例運(yùn)行并打印名字,當(dāng)然實(shí)際這里mycase可能還有一些參數(shù)之類的,這里g_casemap可以是map<string, function<void()>>類型

這就是宏的魅力[未來有你_登場]在cpp模板仍不夠完備的今天[海伊_大哭]起到類似自定義關(guān)鍵字的效果[海伊_比心]

還有PER類型的宏[未來有你_酸了]

#define PER_TYPE(type) if constexpr (is_same_v<T, type>) return #type; \

if constexpr (is_same_v<T, array<type, 3>>) return #type “3”;

PER_TYPE(float) PER_TYPE(int)

這些可都是模板函數(shù)做不到的哦[未來有你_酸了]

宏函數(shù)可能臟亂差[幻想鄉(xiāng)的日常 第1彈_抱頭蹲防]但絕不會沒用[幻想鄉(xiāng)的日常 第1彈_真香]指定編譯期參數(shù)用的宏常量更不必多說[未來有你_登場]在發(fā)現(xiàn)模板函數(shù)隔靴搔癢時(shí)[星塵_大哭]就該果斷選擇成為宏孩兒[海伊_比心]保證甲方任務(wù)的高效完成[鹿乃桜帆_拜拜~]

【C/C++進(jìn)階】宏函數(shù)實(shí)用指南的評論 (共 條)

分享到微博請遵守國家法律
张家港市| 阿瓦提县| 西畴县| 普兰县| 尼玛县| 喜德县| 盐边县| 沐川县| 濮阳市| 乌兰县| 莫力| 隆回县| 玉环县| 晋江市| 汝州市| 奉贤区| 义乌市| 芜湖市| 阜阳市| 鄱阳县| 崇义县| 宁远县| 敖汉旗| 龙游县| 胶南市| 义乌市| 余江县| 乾安县| 汶川县| 忻州市| 邵东县| 陆河县| 栾城县| 沂水县| 灵台县| 大洼县| 商城县| 龙陵县| 贡山| 高淳县| 定襄县|