2010-04-05 56 views
1

我无法让智能感知自动完成共享指针,用于升级1.40.0。 (它工作正常的升压1.33.1。)下面是一个简单的示例项目文件,其中自动完成不工作:智能感应失败boost :: shared_ptr在Visual Studio 2008中使用Boost 1.40.0

#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类的前向声明。它确实不是把我带到实际的定义,这是在<boost/smart_ptr/shared_ptr.hpp>。然而,它编译得很好,自动完成适用于“boost ::”。此外,自动完成适用于boost :: scoped_ptr和boost :: shared_array。

任何想法?

回答

3

我最近也遇到了这个问题,并寻找答案。我发现所有人都表示Intellisense将在VC10中得到改进,或者我现在应该使用Visual Assist来改进它。我不喜欢这些答案,所以我尝试了一下。以下是解决大多数问题的解决方案(至少它修复了scoped_ptr没有的shared_ptr问题)。

SOLUTION:

更改智能感知跳转到exception.hpp包括模板参数名称T.

变化

template <class> 
class shared_ptr; 

template <class T> 
class shared_ptr; 

向前声明似乎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

这完美的作品!谢谢你跟踪这个! – 2010-04-15 19:38:31

4

Intellisense拥有自己的编译器,它可以原谅代码错误(它必须能够理解不完整的代码),但有时候却无法正确解析正确的代码。后者对于要求严格的模板代码尤其如此(这种提升是臭名昭着的)。

要么和它一起生活,要么等到Intellisense使用“正常”编译器(是之前公布的VC10还是之后的版本?),或者尝试如果Visual Assist的最新版本更好。