程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> BOOST_TYPEOF和BOOST_AUTO,boost_typeof

BOOST_TYPEOF和BOOST_AUTO,boost_typeof

編輯:C++入門知識

BOOST_TYPEOF和BOOST_AUTO,boost_typeof


1.簡介

  頭文件<boost/typeof.hpp>裡定義了兩個宏:BOOST_TYPEOFBOOST_AUTO,分別用於仿真C++新標准的typeof和auto關鍵字,可以在編譯期自動推導表達式的類型。它們不僅能夠推導C++語言內建的int、double、數組、函數指針等等類型,也支持標准庫中的容器類型,使程序員再也不需要寫復雜的類型定義就能夠輕松聲明變量。

2.宏的聲明

  這兩個宏完全模仿了typeof和auto關鍵字的用法,除了因為宏的語法限制而不得不使用逗號分隔參數,宏的簡要聲明如下:

1 #define BOOST_TYPEOF(Expr)\     
2 boost::type_of::decode_begin<BOOST_TYPEOF_ENCODED_VECTOR(Expr) >::type  
3 #define BOOST_AUTO(Var, Expr) BOOST_TYPEOF(Expr) Var = Expr 

  BOOST_TYPEOF使用一個表達式作為宏的參數,它可以如typeof那樣推導出表達式Expr的類型。BOOST_AUTO的功能則與auto類似,使用BOOST_TYPEOF推導表達式Expr類型,然後用這個類型聲明變量Var,並將表達式的結果賦值給Var。由於BOOST_AUTO實際上調用了BOOST_TYPEOF,因此它不僅能夠聲明普通變量,也能夠在變量名前加上&或者*修飾,聲明引用或者指針變量

3.例子

  示范BOOST_TYPEOF和BOOST_AUTO用法的代碼如下:

 1 #include <boost/typeof/typeof.hpp> 
 2 vector<string> func()                           //一個返回vector<string>的函數  
 3 {  
 4     vector<string> v(10);  
 5     return v;  
 6 }  
 7 int main()  
 8 {  
 9     BOOST_TYPEOF(2.0*3) x = 2.0 * 3;            //推導類型為double  
10     BOOST_AUTO(y, 2+3);                         //推導類型為int  
11     BOOST_AUTO(&a, new double[20]);             //推導類型為double*的引用  
12     BOOST_AUTO(p, make_pair(1, "string"));      //推導類型為pair<int,const char*> 
13     BOOST_AUTO(v, func());                      //推導類型為vector<string> 
14 }  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved