boost之any原始碼解析

2021-07-03 21:05:46 字數 1096 閱讀 9511

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 內部類...