告別枚舉前綴困擾:using enum 如何讓代碼優(yōu)雅提升十倍
哎呀呀,親愛(ài)的小可愛(ài)們 ??,今天讓我們來(lái)聊一聊 C++20 里面的一個(gè)超級(jí)貼心的新特性呢 -using enum 聲明 ?。是不是經(jīng)常被那些煩人的枚舉類(lèi)型前綴搞得頭暈?zāi)X脹啊? ?? 感覺(jué)敲鍵盤(pán)的手指都要抽筋了呢! ??
來(lái)來(lái)來(lái),讓我們一起看看以前寫(xiě)代碼時(shí)的痛苦時(shí)光 ??:
enum class Mood {
Happy,
Sad,
Excited
};
void howAreYou() {
Mood mood = Mood::Happy; // 哎呀呀,又要寫(xiě)這個(gè)討厭的 Mood:: 前綴 ??
if (mood == Mood::Happy) {
std::cout << "我超開(kāi)心的啦! ?" << std::endl;
}
}
看到木有? 每次想用個(gè)小小的枚舉值,都要乖乖地寫(xiě)上那個(gè)又臭又長(zhǎng)的Mood:: 前綴 ??。感覺(jué)就像是寫(xiě)代碼的時(shí)候,總要帶著一個(gè)沉重的包袱在跑步一樣累死啦! ??♂??? 手指都快敲斷啦! ??
救星來(lái)啦! ??♂?
親愛(ài)的小伙伴們~快來(lái)看看這個(gè)超級(jí)可愛(ài)的新特性吧! ?? 有了using enum 這個(gè)小可愛(ài)后,我們的代碼世界立刻變得美好得像撒了糖一樣甜蜜 ??。讓我們一起來(lái)感受這份清爽吧:
void howAreYou() {
using enum Mood; // 快看快看!這個(gè)魔法咒語(yǔ)太棒啦! ???
Mood mood = Happy; // 哇塞!煩人的前綴不見(jiàn)啦! ??
if (mood == Excited) { // 代碼看起來(lái)超級(jí)清爽呢~ ??
std::cout << "開(kāi)心得想跳舞啦! ??" << std::endl;
}
}
哎呀呀,是不是感覺(jué)整個(gè)世界都變得清清爽爽的呢? ?? 再也不用寫(xiě)那個(gè)又臭又長(zhǎng)的前綴啦,手指都輕松了好多呢! ?? 感覺(jué)就像是把沉重的書(shū)包放下了一樣,整個(gè)人都輕飄飄的~ ?? 寫(xiě)代碼也可以這么快樂(lè),這就是 C++20 帶給我們的小確幸啦! ??
在類(lèi)里也能玩耍哦! ?? ??
親愛(ài)的小伙伴們,你們知道嗎?這個(gè)超級(jí)可愛(ài)的using enum 不僅可以在普通函數(shù)里使用,在類(lèi)里面也能發(fā)揮它的魔法力量呢! ??♀?? 讓我們一起來(lái)看看這個(gè)有趣的例子吧:
class GameCharacter {
enum class State {
Standing,
Running,
Jumping
};
using enum State; // 施展魔法咒語(yǔ)! ???
void updateState() {
currentState = Running; // 哇塞!代碼看起來(lái)超級(jí)清爽呢~ ??
if (currentState == Jumping) {
// 我們的小角色要起飛啦! ?? ??
}
}
State currentState; // 悄悄記錄我們角色的狀態(tài) ??
};
看到了嗎?只要在類(lèi)里輕輕地寫(xiě)上using enum State 這行魔法咒語(yǔ) ??,我們就可以直接使用那些可愛(ài)的狀態(tài)名啦!不用再寫(xiě)又臭又長(zhǎng)的State:: 前綴了呢~ 感覺(jué)整個(gè)代碼都變得輕盈飄逸,就像跳芭蕾舞一樣優(yōu)雅呢! ??? 這樣寫(xiě)代碼是不是感覺(jué)整個(gè)人都變得快樂(lè)了起來(lái)呀? ?? ??
這個(gè)小技巧簡(jiǎn)直就是給我們的代碼加了一對(duì)隱形的翅膀,讓它變得既漂亮又容易理解,就像給枯燥的代碼撒了一把童話般的魔法粉末! ??♀? ??
小心"撞車(chē)"哦! ?? ??
哎呀呀,小可愛(ài)們要注意啦! ?? 在使用這個(gè)超級(jí)可愛(ài)的using enum 的時(shí)候,還有一個(gè)有趣的小故事要告訴你們呢~ ?? 就像是在馬戲團(tuán)里面,如果兩個(gè)小丑穿著一模一樣的衣服,觀眾們可能就分不清誰(shuí)是誰(shuí)啦! ??♂? 我們的枚舉值也會(huì)遇到這樣可愛(ài)又尷尬的情況呢:
enum class Animal { Cat, Dog };
enum class Pet { Cat, Hamster };
void confusingPets() {
using enum Animal;
using enum Pet; // 哎呀呀,兩個(gè) Cat 打架啦! ?? 喵喵喵~
// auto pet = Cat; // 可憐的編譯器要抓狂啦! ???? "這到底是哪只貓咪呀?"
}
就像兩只可愛(ài)的小貓咪搶著同一個(gè)逗貓棒玩耍一樣 ????,當(dāng)我們同時(shí)使用兩個(gè)帶有相同名字的枚舉值時(shí),編譯器就會(huì)陷入天人交戰(zhàn)的困境啦~ ??? 它就像是一個(gè)被問(wèn)到"你更喜歡爸爸還是媽媽"的小朋友一樣,完全不知道該怎么選擇才好呢! ??? 所以我們要像照顧小花園一樣,細(xì)心地避免這樣的"撞車(chē)"場(chǎng)面哦! ?? ??
實(shí)戰(zhàn)小貼士 - 來(lái)點(diǎn)有趣的例子吧! ?? ?
哎呀呀,親愛(ài)的小可愛(ài)們 ??,讓我們一起來(lái)玩點(diǎn)有趣的實(shí)戰(zhàn)例子吧!今天要給大家展示一下這個(gè)超級(jí)可愛(ài)的using enum 是怎么在實(shí)際項(xiàng)目中發(fā)光發(fā)熱的呢~ ??
來(lái)看看這個(gè)超級(jí)有趣的游戲引擎例子吧! ??
// 在命名空間中玩耍~ ??
namespace GameEngine {
enum class Direction { Up, Down, Left, Right };
class Player {
using enum Direction; // 施展魔法! ? 讓枚舉值自由自在地飛翔吧~
void move(Direction dir) {
switch(dir) {
case Up: position.y++; break; // 小火箭往上飛! ??
case Down: position.y--; break; // 小企鵝往下滑~ ??
case Left: position.x--; break; // 小兔子往左跳! ??
case Right: position.x++; break; // 小貓咪往右跑! ??
}
}
};
}
// 哎呀,模板類(lèi)也想玩這個(gè)游戲呢! ?? ??
template<typename T>
class StateManager {
enum class State { Active, Inactive, Pending };
using enum State; // 打開(kāi)魔法開(kāi)關(guān)! ?? ?
void transition() {
if (currentState == Active) { // 看看這清爽的代碼,就像喝了冰闊落一樣爽! ??
// 在這里寫(xiě)一些神奇的狀態(tài)轉(zhuǎn)換魔法 ?? ?
}
}
State currentState; // 悄悄藏起來(lái)的小秘密~
??
};
瞧瞧這些可愛(ài)的代碼吧! ?? 是不是感覺(jué)整個(gè)世界都變得五彩繽紛了呢? 在命名空間里,在模板類(lèi)里,我們的using enum 都能開(kāi)開(kāi)心心地施展魔法 ??♀?,讓枚舉值像是撒了糖一樣甜蜜可愛(ài)~ ??
小魔法師的秘密錦囊 ?? ?
哎呀呀,親愛(ài)的小可愛(ài)們 ??,來(lái)來(lái)來(lái)~讓我偷偷告訴你們一些使用using enum 的小秘密呢!就像魔法師的百寶袋一樣,里面藏著好多好玩的技巧哦 ??♀? ??
首先呢,我們可以像包餃子一樣,把using enum 用花括號(hào)包起來(lái) ??,這樣它的魔法就不會(huì)到處亂跑啦!就像這樣:
void processState() {
{
using enum GameState; // 把魔法封印在這個(gè)小盒子里 ?? ?
// 在這里盡情施展魔法吧!?? ??
}
// 出了盒子就安全啦!就像把調(diào)皮的小精靈關(guān)在魔法瓶里一樣~ ??♀? ??
}
哦!對(duì)了!還有一個(gè)超級(jí)可愛(ài)的用法,就是和 switch 語(yǔ)句一起玩耍 ????纯催@個(gè)日志系統(tǒng),簡(jiǎn)直萌到爆炸啦 ??:
enum class LogLevel { Debug, Info, Warning, Error };
void log(LogLevel level, std::string_view message) {
using enum LogLevel; // 施展魔法咒語(yǔ) ? ??
switch(level) {
case Debug: std::cout << "?? 小蟲(chóng)蟲(chóng)來(lái)幫忙啦~ "; break;
case Info: std::cout << "?? 叮咚!有新消息! "; break;
case Warning: std::cout << "?? 哎呀呀要小心哦! "; break;
case Error: std::cout << "? 糟糕,出錯(cuò)啦! "; break;
}
std::cout << message << std::endl; // 把消息傳遞給世界 ?? ??
}
看看這些可愛(ài)的表情符號(hào),是不是感覺(jué)連調(diào)試信息都變得萌萌噠了呢??? 這樣寫(xiě)代碼簡(jiǎn)直就像在跟小動(dòng)物們一起玩耍一樣開(kāi)心呀!?? ?? ?? 每次看到這樣的代碼,心情都會(huì)變得美美的,就像吃到了最?lèi)?ài)的糖果一樣甜蜜 ?? ?
溫馨的小結(jié)尾 ??
有了這個(gè)可愛(ài)的using enum,我們的代碼不僅看起來(lái)更清爽,寫(xiě)起來(lái)也更輕松啦! 這就是 C++20 給我們帶來(lái)的溫暖小驚喜~ 感謝 C++ 委員會(huì)的大佬們這么貼心! ???
記住哦,寫(xiě)代碼也可以很優(yōu)雅,也可以充滿樂(lè)趣! 下次見(jiàn)啦! ??