智能感应失败boost :: shared_ptr在Visual Studio 2008中使用Boost 1.40.0
我无法让智能感知自动完成共享指针,用于升级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。
任何想法?
我最近也遇到了这个问题,并寻找答案。我发现所有人都表示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->"
}
不管怎么说,这是测试非下调例如一个问题,我们还是有,但是这是很不常见的,所以我们可以住在一起,直到智能感知得到改善。
Intellisense拥有自己的编译器,它可以原谅代码错误(它必须能够理解不完整的代码),但有时候却无法正确解析正确的代码。后者对于要求严格的模板代码尤其如此(这种提升是臭名昭着的)。
要么和它一起生活,要么等到Intellisense使用“正常”编译器(是之前公布的VC10还是之后的版本?),或者尝试如果Visual Assist的最新版本更好。
这完美的作品!谢谢你跟踪这个! – 2010-04-15 19:38:31