1

ブースト 1.40.0 の共有ポインターをオートコンプリートする intellisense を取得するのに問題があります。(Boost 1.33.1 では問題なく動作します。) 以下は、オートコンプリートが機能しない単純なサンプル プロジェクト ファイルです。

#include <boost/shared_ptr.hpp>

struct foo
{ bool func() { return true; }; };

void bar() {
    boost::shared_ptr<foo> pfoo;
    pfoo.get();      // <-- intellisense does not autocomplete after "pfoo."
    pfoo->func();    // <-- intellisense does not autocomplete after "pfoo->"
}

shared_ptr を右クリックして [定義に移動] を実行すると、 の shared_ptr クラスの前方宣言が表示され<boost/exception/exception.hpp>ます。にある実際の定義には至りませ<boost/smart_ptr/shared_ptr.hpp>。ただし、コンパイルは正常に行われ、「boost::」のオートコンプリートは正常に機能します。また、オートコンプリートは、boost::scoped_ptr と boost::shared_array に対して正常に機能します。

何か案は?

4

3 に答える 3

4

Intellisenseには独自のコンパイラがあり、コードエラーを許容します(不完全なコードを理解できる必要があります)が、正しいコードを正しく解析できない場合があります。後者は、要求の厳しいテンプレートコード(ブーストは悪名高い)に特に当てはまります。

それと一緒に暮らすか、Intellisenseが「通常の」コンパイラを使用するまで待つか(VC10またはそれ以降のバージョンで発表されましたか?)、またはVisualAssistの最新バージョンの方が優れているかどうか試してください。

于 2010-04-05T20:21:29.027 に答える
3

私も最近これに遭遇し、答えを探しに行きました。私が見つけたのは、Intellisense が VC10 で改善される予定である、または Visual Assist を使用して今すぐ改善する必要があると言う人だけでした。私はこれらの答えが気に入らなかったので、少し実験しました。ほとんどの問題を修正するソリューションを次に示します (少なくとも、shared_ptr にはあり、scoped_ptr にはなかった問題を修正します)。

解決:

Intellisense が例外 .hpp でジャンプする前方宣言を変更して、テンプレート パラメーター名 T を含めます。

変化する

template <class>
class shared_ptr;

template <class T>
class shared_ptr;

Intellisense はテンプレート パラメータ名のない定義を別のクラスと見なしているようで、これが shared_ptr と scoped_ptr の違いの根源です。

さて、これですべての問題が解決したわけではないと述べました。ヘッダー ファイルで宣言されたテンプレート化されたオブジェクトが、cpp ファイルのテンプレート タイプを保持しないことがあります。

元。

// file.h
#include <boost/shared_ptr.hpp>

struct foo
{
    void funcA() {}
};

struct bar
{
    void funcB();
    boost::shared_ptr<foo> pfoo;
};

そして、cppファイルで

// file.cpp
#include "file.h"

void bar::funcB()
{
    pfoo.get();      // <-- intellisense does autocomplete after "pfoo."
    pfoo->func();    // <-- intellisense does not autocomplete after "pfoo->"
}

とにかく、これはまだテストされていない問題の縮小例ですが、それほど一般的ではないため、Intellisense が改善されるまでは我慢できます。

于 2010-04-15T19:01:34.173 に答える
1

価値のあるものとして、VC++ 2010 にはIntellisense 用の別の (EDG) コンパイラが付属しています。VS2010 で Boost 1.40 を試しましたか?

于 2010-04-05T21:43:57.573 に答える