本節簡單介紹boost庫中與數值相關的boost::any、boost::lexical_cast,以及有理數類boost::rational。
boost庫提供了any類,boost::any是乙個能儲存任意型別值的類,這一點有點像variant型別,不過variant由於採用了乙個巨大的union,效率非常低。而boost利用模板,儲存的時候並不改變值的型別,只是在需要的時候才提供方法讓使用者進行型別判斷及取值。
boost::any幾乎可以用來儲存任何資料型別:
boost::any ai, as;需要的時候,我們又可以使用any_cast將原來的資料還原:ai = 100;
as = string(
"hello"
);
inti = boost::any_cast<當這種轉換發生型別不匹配時,會有異常bad_any_cast發生:int
>(ai);
string s = boost::any_cast(as);
trycatch在傳統的c++程式中,為了支援各種資料型別,我們不得不使用萬能指標"void *",但是很遺憾的是,基於萬能指標的轉換是不安全的,"void*"缺少型別檢查。所以,我們建議大家盡量使用any類。(boost::bad_any_cast & e)
現在動手編寫如下程式,體驗如何使用boost::any來完成物件型別轉換。
【程式 4-10】使用boost::any完成物件型別轉換
01 #include"stdafx.h"
02 #include
"boost/any.hpp"
03 #include
04
05
using
namespace
std;
06
using
namespace
boost;
07
08
class
cat
09 ;
11
12
void
print(any it)
13
19
20
if
(it.type() ==
typeid
(int
))
21
25
26
if
(it.type() ==
typeid
(string))
27
31
32
if
(it.type() ==
typeid
(cstring))
33
37
38
if
(it.type() ==
typeid
(cat))
39
43 }
44
45
int
main()
46 ;
50
for
(int
i = 0; i
sizeof
(as) /
sizeof
(as[0]); i++)
51
54
55
return
0;56 }
結果輸出如圖4-18所示:
白喬原創 萬能型別boost any
4.6 使用第三方庫 以上介紹了visual c 對物件賦值 轉換及字元編碼轉換的方法,實際上還有一些好用的第三方類庫用以輔助c 程式設計師完成物件處理,比較著名的就是boost。本節簡單介紹boost庫中與數值相關的boost any boost lexical cast,以及有理數類boost ...
白喬原創 萬能型別boost any
4.6 使用第三方庫 以上介紹了visual c 對物件賦值 轉換及字元編碼轉換的方法,實際上還有一些好用的第三方類庫用以輔助c 程式設計師完成物件處理,比較著名的就是boost。本節簡單介紹boost庫中與數值相關的boost any boost lexical cast,以及有理數類boost ...
萬能密碼 php,PHP萬能密碼
說實話如果乙個 的前台都是注入漏洞,那麼憑經驗,萬能密碼進後台的機率基本上是百分之百。可是有的人說對php的站如果是gpc魔術轉換開啟,就會對特殊符號轉義,就徹底杜絕了php注入。其實說這話的人沒有好好想過,更沒有嘗試過用萬能密碼進php的後台。其實gpc魔術轉換是否開啟對用萬能密碼進後台一點影響也...