BOOST_TYPOFとBOOST_AUTO
1519 ワード
ヘッダファイルhpp>には2つのマクロが定義されています:BOOST_TYPOFとBOOST_AUTOは、C++の新しい規格をシミュレートするtypeofとautoキーワードにそれぞれ使用され、コンパイル期間中に式のタイプを自動的に導くことができます.C++言語で構築されたint、double、配列、関数ポインタなどのタイプを導くだけでなく、標準ライブラリのコンテナタイプもサポートされており、プログラマーが複雑なタイプ定義を書く必要がなくなり、変数を簡単に宣言することができます.
この2つのマクロはtypeofとautoキーワードの使い方を完全に模倣しており、マクロの構文制限のためカンマ区切りパラメータを使用しなければならないほか、マクロの簡単な宣言は以下の通りです.
BOOST_TYPEEOFはマクロのパラメータとして式を使用し、typeofのように式Exprのタイプを導出します.BOOST_AUTOの機能はautoと似ており、BOOST_を使用しているTYPEEOFは式Exprタイプを導出し、このタイプで変数Varを宣言し、式の結果をVarに割り当てます.BOOST_AUTOは実際にBOOST_を呼び出しましたTYPEEOFは、通常の変数だけでなく、変数名に&または*修飾を加えたり、参照またはポインタ変数を宣言したりすることができます.
モデルBOOST_TYPOFとBOOST_AUTOの使い方のコードは以下の通りです.
【転入先:http://book.51cto.com/art/201205/335178.htm】
この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】