2010-04-05 3 views
1

인텔리 센스가 인텔리 센스로 부스터 1.40.0에 대한 공유 포인터를 자동 완성하는 데 문제가 있습니다. (그것은 부스트 ​​1.33.1을 위해 잘 작동합니다.) 여기에 자동 완성 기능이 작동하지 않는 간단한 샘플 프로젝트 파일입니다 :Intellisense가 Visual Studio 2008에서 부스트 1.40.0과 함께 boost :: shared_ptr에 실패합니다.

#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을 마우스 오른쪽 버튼으로 클릭하고 할 "정의로 이동이,"그것은 나를 제공 <boost/exception/exception.hpp>에있는 shared_ptr 클래스의 forward-declaration에 전달합니다. 그것은 이 아니고<boost/smart_ptr/shared_ptr.hpp>에있는 실제 정의로 가져옵니다. 그러나, 그것은 잘 컴파일하고 자동 완성 "부스트 ::."잘 작동합니다. 또한 자동 완성 기능은 boost :: scoped_ptr과 boost :: shared_array에서 잘 작동합니다.

아이디어가 있으십니까?

답변

3

나는 또한 최근에 이것에 부딪쳤다. 내가 발견 한 모든 것은 Intellisense가 VC10에서 개선 될 것이라고 말하거나 Visual Assist를 사용하여 Intellisense를 향상시켜야한다는 사람들이었습니다. 나는이 대답을 싫어해서 조금 실험했다. 다음은 대부분의 이슈를 수정하는 솔루션입니다 (적어도 scoped_ptr이 가진 shared_ptr 문제를 수정했습니다).

해결책 :

변경 인텔리 템플릿 매개 변수 이름 T.

변경

template <class> 
class shared_ptr; 

으로

template <class T> 
class shared_ptr; 

을 포함 exception.hpp에서 점프 전방 선언 Intellisense는 템플릿 PA없이 정의를 고려한 것으로 보입니다. rameter 이름은 별도의 클래스가되어야하며 이는 shared_ptr과 scoped_ptr의 차이점의 근원입니다.

이제이 문제가 내 모든 문제를 해결하지 못했다고 언급했습니다. 때때로 헤더 파일에 선언 된 템플리트 화 된 오브젝트는 cpp 파일에 템플리트 유형을 보유하지 않습니다.

Ex.

// 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->" 
} 

에, 그것은 우리가 아직이 문제의 예를 손질 테스트 비입니다하지만 인텔리이 개선 될 때까지 우리가 함께 살 수있는 훨씬 덜 일반적입니다.

+0

완벽하게 작동합니다. 이것을 추적 해 주셔서 감사합니다! –

4

Intellisense는 코드 오류를 용인하는 고유 한 컴파일러 (불완전한 코드를 이해할 수 있어야 함)를 가지고 있지만 때로는 올바른 코드를 올바르게 구문 분석하지 못합니다. 후자는 템플릿 코드를 요구할 때 특히 그렇습니다 (부스트가 유명합니다).

Intellisense가 "일반"컴파일러를 사용할 때까지 기다리거나 (VC10 또는 그 이후 버전에 대해 발표 되었습니까?) Visual Assist의 최신 버전이 더 좋은 경우 시도하십시오.

관련 문제