亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

淺析C++中boost.variant的幾種訪問方法

2020-01-26 14:24:25
字體:
來源:轉載
供稿:網友

Boost.Variant

Variant庫包含一個不同于union的泛型類,用于在存儲和操作來自于不同類型的對象。這個庫的一個特點是支持類型安全的訪問,減少了不同數據類型的類型轉換代碼的共同問題。

Variant 庫如何改進你的程序?

     •對用戶指定的多種類型的進行類型安全的存儲和取回

     •在標準庫容器中存儲不同類型的方法

     •變量訪問的編譯期檢查

     •高效的、基于棧的變量存儲

Variant 庫關注的是對一組限定類型的類型安全存儲及取回,即非無類的聯合。Boost.Variant 庫與 Boost.Any 有許多共同之外,但在功能上也有不同的考慮。在每天的編程中通常都會需要用到非無類的聯合(不同的類型)。保持類型安全的一個典型方法是使用抽象基類,但這不總是可以做到的;即使可以做得,堆分配和虛擬函數的代價也可能太高。你也可以嘗試用不安全的無類類型,如 void* (它會導致不幸),或者是類型安全得無限制的可變類型,如 Boost.Any. 這里我們將看到 Boost.Variant,它支持限定的可變類型,即元素來自于一組支持的類型。

下面將淺談variant的幾種訪問方法,一起來學習學習吧。

使用boost::get

boost::variant<int, std::string> v;v = "Hello world";std::cout << boost::get<std::string>(v) << std::endl;

使用boost::get來訪問,需要給出原始類型,并且這樣做不安全,若類型錯誤,程序將會拋出異常。

使用RTTI

void var_print(boost::variant<int, std::string>& v) {   if (v.type() == typeid(int))   {     std::cout << get<int>(v) << std::endl;   }  else if (v.type() == typeid(std::string))   {     std::cout << get<std::string>(v) << std::endl;   }   // Else do nothing} int main() {   boost::variant<int, std::string> v;  v = "Hello world";   var_print(v);  return 0;}

使用RTTI技術可以避免類型訪問錯誤而程序異常的情況,但是這樣做有點不優雅,每增加一個類型,都需要修改if-else結構,并且使用RTTI會對程序性能有一定影響。

使用訪問者模式

class var_visitor : public boost::static_visitor<void>{public:  void operator()(int& i) const  {    std::cout << i << std::endl;  }  void operator()(std::string& str) const  {    std::cout << str << std::endl;  }};int main() {   boost::variant<int, std::string> v;  v = "Hello world";   boost::apply_visitor(var_visitor(), v);  return 0;}

使用該模式,需要定義一個類并繼承于boost::static_visitor,在類里面需要重載()操作符,通過boost::apply_visitor來訪問原始類型的值,這樣做還是有些繁瑣,每增加一個類型,都需要在var_visitor里面增加一個函數,但比使用RTTI里面的修改if-else結構好得多,因為使用訪問者模式至少是遵循開放-封閉原則的,即對寫開放,對修改封閉。

使用模板函數

class var_visitor : public boost::static_visitor<void>{public:  template<typename T>  void operator()(T& i) const  {    std::cout << i << std::endl;  }};int main() {   boost::variant<int, std::string> v;  v = "Hello world";   boost::apply_visitor(var_visitor(), v);  return 0;}

operator()改成了模板函數的好處就是不用關心variant支持多少類型。

總結

以上就是這篇文章的全部內容,希望本文的內容對大家學習或者使用C++能有所幫助,如果有疑問大家可以留言交流。謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产高跟鞋裸体秀xxxhd| 久久久成人av| 精品国产区一区二区三区在线观看| 91精品久久久久久久久久久| 免费91麻豆精品国产自产在线观看| 国产三级精品网站| 亚洲综合中文字幕68页| 久久久视频精品| 在线成人激情视频| 亚洲成av人片在线观看香蕉| 亚洲乱码国产乱码精品精天堂| 日韩女在线观看| 免费91在线视频| 亚洲免费小视频| 国产成人精品999| 久久久噜噜噜久噜久久| 亚洲韩国日本中文字幕| 欧美日韩人人澡狠狠躁视频| 亚洲色图色老头| 国产精品久久久久久av福利| 日韩av片永久免费网站| 亚洲有声小说3d| 日韩国产中文字幕| 亚洲性视频网站| 亚洲一区二区三区四区视频| 国产日本欧美一区| 欧美色xxxx| 国产日韩欧美中文在线播放| 91视频国产精品| 超碰精品一区二区三区乱码| 精品亚洲va在线va天堂资源站| 日韩精品中文字| 国产精品一久久香蕉国产线看观看| 97在线视频精品| 国产一区二区三区高清在线观看| 久久久国产精品一区| 亚洲精品一区在线观看香蕉| 国产精品久久久久久久9999| 久久精品福利视频| 欧美大码xxxx| 最新69国产成人精品视频免费| 日韩av片电影专区| 成人97在线观看视频| 亚洲二区中文字幕| 亚洲综合最新在线| 日韩在线视频免费观看| 日韩天堂在线视频| 亚洲成色999久久网站| 国产在线日韩在线| 成人av资源在线播放| 91精品国产综合久久香蕉最新版| 国内偷自视频区视频综合| 精品夜色国产国偷在线| 成人a免费视频| 亚洲国产精品一区二区三区| 国产精品成人一区二区| 在线观看免费高清视频97| 精品高清一区二区三区| 91av在线免费观看视频| 亚洲自拍欧美另类| 亚洲欧美日韩一区在线| 精品亚洲夜色av98在线观看| 久久久久久久影院| 午夜剧场成人观在线视频免费观看| 国产剧情久久久久久| 91网站免费观看| 亚洲系列中文字幕| 美女福利视频一区| 亚洲老头同性xxxxx| 日韩免费中文字幕| 亚洲最大成人网色| 欧美性猛交xxxx乱大交3| 日产精品99久久久久久| 91av在线播放| 国产精品人成电影| 久久久久久一区二区三区| 久久视频国产精品免费视频在线| 亚洲国产美女精品久久久久∴| 日本精品久久久| 久久中文字幕在线| 日韩在线免费视频| 91亚洲国产成人久久精品网站| xvideos成人免费中文版| 成人中文字幕在线观看| 国产精品女视频| 国产在线精品一区免费香蕉| 91精品久久久久久综合乱菊| 亚洲丁香久久久| 精品亚洲va在线va天堂资源站| 中文字幕少妇一区二区三区| 国产一区二区三区网站| 91日韩在线播放| 成人精品视频在线| 97精品视频在线| 在线观看免费高清视频97| 国产成人亚洲综合91精品| 亚洲网站在线播放| 精品久久久久久久久久国产| 亚洲成人性视频| 欧美激情亚洲精品| 亚洲mm色国产网站| 国内精品久久久久久久久| 国产精品美女主播| 亚洲女人初尝黑人巨大| 欧美日韩国产麻豆| 国产欧美精品一区二区三区介绍| 久久深夜福利免费观看| 亚洲人成网7777777国产| 国产免费观看久久黄| 亚洲精品美女在线观看| 欧洲日本亚洲国产区| 亚洲国产女人aaa毛片在线| 亚洲嫩模很污视频| 国产亚洲精品久久久久久777| 日韩电影视频免费| 国产成人精品一区二区三区| 欧美在线性爱视频| 国产精品免费一区豆花| 日本午夜精品理论片a级appf发布| 国产精品久久久久久久久男| 色婷婷久久一区二区| 亚洲第一天堂无码专区| 成人精品一区二区三区电影免费| 亚洲免费人成在线视频观看| 久久免费在线观看| 精品性高朝久久久久久久| 亚洲精美色品网站| 国产精品美女免费视频| 亚洲一二三在线| 国产亚洲美女精品久久久| 欧美精品videofree1080p| 国产日产欧美a一级在线| 成人激情视频在线| 日韩中文字幕视频在线| 78m国产成人精品视频| 久久亚洲私人国产精品va| 欧美成人免费观看| 日韩高清av一区二区三区| 亚洲天堂av在线免费观看| 亚洲成人a级网| 日韩精品高清在线观看| 日韩国产在线看| 亚洲深夜福利网站| 欧美高清自拍一区| 久久久99久久精品女同性| 久久久久久久91| 久久综合九色九九| 韩国三级日本三级少妇99| 91夜夜揉人人捏人人添红杏| 日韩激情在线视频| 成人国产精品久久久久久亚洲| 欧美性猛交丰臀xxxxx网站| 日韩av影片在线观看| 日韩精品久久久久久福利| 亚洲欧美日韩在线高清直播| 在线成人免费网站| 欧美大人香蕉在线| 国产精品久久久久av免费| 2019中文字幕在线免费观看| 欧美亚洲国产另类| 一区二区在线视频| 欧洲中文字幕国产精品| 一区二区三区视频免费在线观看| 色噜噜狠狠色综合网图区|