頭文件<boost/typeof.hpp>裡定義了兩個宏:BOOST_TYPEOF和BOOST_AUTO,分別用於仿真C++新標准的typeof和auto關鍵字,可以在編譯期自動推導表達式的類型。它們不僅能夠推導C++語言內建的int、double、數組、函數指針等等類型,也支持標准庫中的容器類型,使程序員再也不需要寫復雜的類型定義就能夠輕松聲明變量。
這兩個宏完全模仿了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,因此它不僅能夠聲明普通變量,也能夠在變量名前加上&或者*修飾,聲明引用或者指針變量。
示范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 }