Я тоже недавно столкнулся с этим и пошел искать ответ. Все, что я нашел, было то, что люди говорили, что Intellisense будет улучшен в VC10 или что я должен улучшить его сейчас, используя Visual Assist. Мне не понравились эти ответы, поэтому я немного поэкспериментировал. Вот решение, которое устраняет большинство проблем (по крайней мере, исправляет проблемы, которые имел shared_ptr, которых не было у scoped_ptr).
РЕШЕНИЕ:
Измените прямое объявление, к которому переходит Intellisense в файле exception.hpp, чтобы включить имя параметра шаблона T.
Изменение
template <class>
class shared_ptr;
К
template <class T>
class shared_ptr;
Похоже, что Intellisense рассматривает определение без имени параметра шаблона как отдельный класс, и в этом корень разницы между 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 не улучшится.