any是乙個特殊的容器,它只能容納乙個元素,但元素型別是任意的
使用也比較簡單
內部是通過typeinfo的概念實現的。
void canytest::test1()
catch (boost::bad_any_cast&)
catch (boost::bad_any_cast&)
}當然,我們也可以把try..catch封裝在乙個介面中讓呼叫看著行數少一點。或則自己使用typeinfo的概念先判斷一下能否轉換,然後使用assert,減少throw異常
原始碼實現也比較簡單,從最底層的基類看起吧
class placeholder
public: // queries
virtual const boost::typeindex::type_info& type() const boost_noexcept = 0;
virtual placeholder * clone() const = 0;
裡面只是乙個簡單的基類介面,然後是真正存放資料的結構
template
class holder : public placeholder
// 返回了type_info資訊
virtual const boost::typeindex::type_info& type() const boost_noexcept
public: // representation
valuetype held; // 真正資料儲存的地方
然後再看any的建構函式,其實就是把值new乙個,然後放到holder中
template
any(const valuetype & value)
: content(new holder<
boost_deduced_typename remove_cv::type>::type
>(value))
還有乙個重要函式,any_cast的實現
template
valuetype any_cast(any & operand)
就是使用了type_id進行判斷
基本上就是這些了
我們也可以這些了
Boost 原始碼分析筆記8 any
喜歡這篇文章嗎?喜歡的話去看博主的置頂部落格,即可依據分類找到此文章的原版得到更好的體驗,title boost 原始碼分析筆記8 any mathjax true date 2020 03 17 16 55 58 categories c 筆記,boost原始碼分析筆記 tags c 筆記,boo...
Spring原始碼解析之 Aop原始碼解析(2)
spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...
原始碼解析 JDK原始碼之LinkedHashMap
linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...