c++之類型別名的實現(xiàn)
類型別名,顧名思義就是為一個類型創(chuàng)建一個新的名稱,使用這個新的名稱與使用之前的名稱一模一樣。
c++98版本的類型別名
c++98版本的類型別名方式使用的是typedef關(guān)鍵字,通過typedef關(guān)鍵字實現(xiàn)的類型別名,下面將展示一些c++98版本的類型別名方式。
//基本類型別名 typedef int Integer; //不要忘記逗號 typedef unsigned int UInt; //不要忘記逗號 //指針類型別名 typedef int* IntPtr; //不要忘記逗號 typedef char* CharPtr; //不要忘記逗號 //函數(shù)指針別名 typedef void (*FuncPtr)(int, int); //復(fù)雜類型別名 typedef std::vector<std::string> StringVector; typedef std::map<std::string, int> StringIntMap;
現(xiàn)代c++的類型別名方式
在c++11版本引入了using,通過using實現(xiàn)類型別名,詳細的示例如下所示:
//基本類型的類型別名 using Integer = int; using UInt = unsigned int; //指針類型的類型別名 using IntPtr = int*; using CharPtr = char*; //函數(shù)指針的類型別名 using FuncPtr = void(*)(int, int); //復(fù)雜類型的類型別名 using StringVector = std::vector<std::string>; using StringIntMap = std::map<std::string, int>;
為什么引入using?
之所以引入using作為推薦的類型別名方式,是因為using方式相對于typedef有著明顯的優(yōu)勢。
- 更清晰的語法
typedef void(*FuncPtr)(int, int); //typedef形式 using FuncPtr = void(*)(int, int); //using形式,更直觀
- 模板別名支持
typedef不支持模板別名,但是using支持模板別名。請看下面的例子:
// 使用using可以創(chuàng)建模板別名 template<typename T> using Vec = std::vector<T>; // 使用示例 Vec<int> numbers; // 等價于 std::vector<int> Vec<std::string> words; // 等價于 std::vector<std::string> // typedef無法直接實現(xiàn)模板別名,需要額外包裝 template<typename T> struct VectorTypedef { typedef std::vector<T> type; };
常見場景
簡化復(fù)雜類型
很多時候?qū)懸恍?fù)雜類型的時候,每次創(chuàng)建該類型的變量或者其他使用該類型的場景,都需要寫很長的類型名,通過類型別名,我們可以定義一個簡短的名字,后續(xù)使用到該類型時,使用這個別名即可。請看下面的例子:
//簡化stl容器 using StringSet = std::set<std::string>; using IntMatrix = std::vector<std::vector<int>>; // 簡化智能指針類型 using StringPtr = std::shared_ptr<std::string>; using IntUPtr = std::unique_ptr<int>;
回調(diào)函數(shù)類型
using ErrorCallback = std::function<void(const std::string&)>; using EventHandler = std::function<void(const Event&)>;
在類中使用類型別名
class Container { public: using value_type = int; using pointer = value_type*; using reference = value_type&; // STL風(fēng)格的類型別名 using iterator = std::vector<value_type>::iterator; using const_iterator = std::vector<value_type>::const_iterator; private: std::vector<value_type> data; };
注意事項
在c++11及以后的c++版本中推薦使用using,不推薦使用typedef.
到此這篇關(guān)于c++之類型別名的實現(xiàn)的文章就介紹到這了,更多相關(guān)c++ 類型別名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt編寫地圖實現(xiàn)動態(tài)點位標(biāo)注的示例代碼
動態(tài)點位標(biāo)注是定制的一個功能模塊,提供直接地圖上選點設(shè)置標(biāo)記點,點位信息用結(jié)構(gòu)體存儲,其中包括了經(jīng)度、緯度、速度、時間等信息。本文將介紹實現(xiàn)這一功能的示例代碼,需要的可以參考一下2022-01-01C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解
這篇文章主要介紹了C語言格式化輸出函數(shù)printf詳解,printf函數(shù)中用到的格式字符與printf函數(shù)中用到的格式修飾符,感興趣的小伙伴可以借鑒一下2023-03-03c++調(diào)用python實現(xiàn)圖片ocr識別
所謂c++調(diào)用python,實際上就是在c++中把整個python當(dāng)作一個第三方庫引入,然后使用特定的接口來調(diào)用python的函數(shù)或者直接執(zhí)行python腳本,本文介紹的是調(diào)用python實現(xiàn)圖片ocr識別,感興趣的可以了解下2023-09-09C++中幾種將整數(shù)轉(zhuǎn)換成二進制輸出的方法總結(jié)
下面小編就為大家?guī)硪黄狢++中幾種將整數(shù)轉(zhuǎn)換成二進制輸出的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09C++自帶的sort函數(shù)如何對vector容器元素進行排序
這篇文章主要介紹了C++自帶的sort函數(shù)如何對vector容器元素進行排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10