Выполняется завершение работы над членами класса, которые являются контейнерами STL.
Завершение работы над локальными объектами, которые являются контейнерами STL, отлично работает.
Например, учитывая следующие файлы:
// foo.h
#include <string>
class foo {
public:
void set_str(const std::string &);
std::string get_str_reverse( void );
private:
std::string str;
};
// foo.cpp
#include "foo.h"
using std::string;
string
foo::get_str_reverse ( void )
{
string temp;
temp.assign(str);
reverse(temp.begin(), temp.end());
return temp;
} /* ----- end of method foo::get_str ----- */
void
foo::set_str ( const string &s )
{
str.assign(s);
} /* ----- end of method foo::set_str ----- */
Я создал теги для этих двух файлов, используя:
ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .
Когда я набираю temp.
в cpp, я получаю список функций-членов string
, как и ожидалось. Но если я набираю str.
omnicppcomplete, выплевывает "Pattern Not Found".
Я заметил, что завершение temp.
работает, только если у меня есть объявление using std::string;
.
Как получить завершение работы над моими членами класса, которые являются контейнерами STL?
Edit
Я обнаружил, что завершение элементов, которые являются контейнерами STL, работает, если я вношу следующие изменения в заголовок:
// foo.h
#include <string>
using std::string;
class foo {
public:
void set_str(const string &);
string get_str_reverse( void );
private:
string str;
};
В принципе, если я добавлю using std::string;
, а затем удалю классификатор пространства имен std::
из члена string str;
и регенерирует файл тегов, то OmniCppComplete сможет выполнить завершение на str.
.
Кажется, не имеет значения, установлен ли let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
в .vimrc
.
Проблема заключается в том, что размещение объявлений using
в заголовочных файлах кажется большим нет-нет, поэтому я вернусь к квадрату.