Intellisense не работает для boost :: shared_ptr с Boost 1.40.0 в Visual Studio 2008 - PullRequest
1 голос
/ 06 апреля 2010

У меня проблемы с получением intellisense для автоматического заполнения общих указателей для повышения 1.40.0.(Он работает нормально для 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.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

Intellisense имеет свой собственный компилятор, который прощает ошибки кода (он должен иметь возможность разобраться в неполном коде), но иногда просто не может правильно проанализировать правильный код. Последнее особенно актуально для требовательных шаблонов кода (для которых известно повышение).

Либо смирись с этим, либо подожди, пока Intellisense не использует «нормальный» компилятор (было ли это объявлено для VC10 или для версии после этого?), Или попробуй, если последняя версия Visual Assist лучше ,

3 голосов
/ 15 апреля 2010

Я тоже недавно столкнулся с этим и пошел искать ответ. Все, что я нашел, было то, что люди говорили, что 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 не улучшится.

1 голос
/ 06 апреля 2010

Для чего стоит, VC ++ 2010 поставляется с отдельным (EDG) компилятором для Intellisense .Вы пробовали Boost 1.40 с VS2010?

...