BOOST_TYPOFとBOOST_AUTO

1519 ワード

ヘッダファイルhpp>には2つのマクロが定義されています:BOOST_TYPOFとBOOST_AUTOは、C++の新しい規格をシミュレートするtypeofとautoキーワードにそれぞれ使用され、コンパイル期間中に式のタイプを自動的に導くことができます.C++言語で構築されたint、double、配列、関数ポインタなどのタイプを導くだけでなく、標準ライブラリのコンテナタイプもサポートされており、プログラマーが複雑なタイプ定義を書く必要がなくなり、変数を簡単に宣言することができます.
この2つのマクロはtypeofとautoキーワードの使い方を完全に模倣しており、マクロの構文制限のためカンマ区切りパラメータを使用しなければならないほか、マクロの簡単な宣言は以下の通りです.
#define BOOST_TYPEOF(Expr)\  
   boost::type_of::decode_begin<BOOST_TYPEOF_ENCODED_VECTOR(Expr) >::type  
#define BOOST_AUTO(Var, Expr) BOOST_TYPEOF(Expr) Var = Expr 

BOOST_TYPEEOFはマクロのパラメータとして式を使用し、typeofのように式Exprのタイプを導出します.BOOST_AUTOの機能はautoと似ており、BOOST_を使用しているTYPEEOFは式Exprタイプを導出し、このタイプで変数Varを宣言し、式の結果をVarに割り当てます.BOOST_AUTOは実際にBOOST_を呼び出しましたTYPEEOFは、通常の変数だけでなく、変数名に&または*修飾を加えたり、参照またはポインタ変数を宣言したりすることができます.
モデルBOOST_TYPOFとBOOST_AUTOの使い方のコードは以下の通りです.
#include <boost/typeof/typeof.hpp> 
vector<string> func()                           //    vector<string>     
{  
    vector<string> v(10);  
    return v;  
}  
int main()  
{  
    BOOST_TYPEOF(2.0*3) x = 2.0 * 3;            //     double  
    BOOST_AUTO(y, 2+3);                         //     int  
 
    BOOST_AUTO(&a, new double[20]);             //     double*     
    BOOST_AUTO(p, make_pair(1, "string"));      //     pair<int,const char*> 
 
    BOOST_AUTO(v, func());                      //     vector<string> 
}  

【転入先:http://book.51cto.com/art/201205/335178.htm】