2016-05-21 12 views
0

私はBOOST_AUTOを初めて使いました。ここには基本的な質問があります。BOOST_AUTOとC++ユーザー定義型

自分のクラスを定義してBOOST_AUTOで使用しました。チュートリアル:

独自のタイプを定義した場合、タイプライブラリはこのタイプについて知らせない限り、 を処理できません。タイプのタイプ/テンプレートを「登録」する手段によって、型式(またはテンプレート)についてTypeof Library に伝えます。

私のコードは何も登録せず、VC++ 2010で正しく動作します。この登録は本当に必要ですか?私は何か悪いことをしましたか?

#include <boost/typeof/typeof.hpp> 
using namespace std; 
namespace NS1 { 
    struct X { 
     X(const X& x){s=x.s+1;} 
     X(){s=3;} 
     int s; 
    }; 
} 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    NS1::X x; 
    BOOST_AUTO(y,x); 

    cout << y.s << endl; 
    return 0; 
} 

出力:4

+0

コンパイラは通常の 'auto'をサポートしています。 – chris

+0

ああそうです! https://msdn.microsoft.com/en-us/library/dd293615(v=vs.100).aspx。これは、VC++ 2010でBOOST_AUTOが自動的に#defineを 'auto'にすることを意味しますか? – JavaMan

+1

@JavaMan:それは問題ではありません。普通の 'auto'を使ってください。 –

答えて

0

docsから:

BOOST_AUTOマクロは、C++で提案されている自動キーワードをエミュレートします。

コードを調べてみると、BOOST_AUTO~BOOST_TYPEOFのようになります。

typeofは、GCCコンパイラの旧拡張名decltypeのようです。 (this SO questionを参照)。 boost typeofライブラリのコードは、msvcに対してautarantlyにautoキーワードを使用しません(here参照)。

このライブラリを書いている時点では、autoキーワードをサポートしていたコンパイラと、そうでないものがありました。この機能をサポートしていないアーキテクチャでコードをコンパイルする場合は、登録が必要です。

いずれにしても、C++ 11はこれまでにリリースされています。コンパイラがすでにautoキーワードをサポートしている場合、このライブラリを使用することは、このライブラリが提案された機能をエミュレートするためにのみ存在するため、悪い習慣とみなされるべきです。

もちろん、何らかの理由でC++ 03にコンパイルする必要があります。

関連する問題