La finalización en miembros de clase que son contenedores de STL está fallando.Vim + OmniCppComplete: Completar en Miembros de clase que son contenedores de STL
La finalización en objetos locales que son contenedores STL funciona bien.
Por ejemplo, dados los siguientes archivos:
// 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 ----- */
he generado las etiquetas para estos dos archivos usando:
ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q .
Cuando escribo temp.
en el CPP me sale una lista de string
miembro funciona como se esperaba. Pero si escribo str.
, omnicppcomplete escupe "Patrón no encontrado".
Me he dado cuenta de que la finalización de temp.
solo funciona si tengo la declaración using std::string;
.
¿Cómo puedo completar el trabajo en los miembros de mi clase que son contenedores STL?
Editar
me encontré con que la terminación de los miembros que son contenedores STL funciona si hago las modificaciones seguimiento a la cabecera:
// foo.h
#include <string>
using std::string;
class foo {
public:
void set_str(const string &);
string get_str_reverse(void);
private:
string str;
};
Básicamente, si añado using std::string;
y luego retire la std::
nombre el calificador de espacio del miembro string str;
y regenere el archivo de etiquetas, luego OmniCppComplete puede completarlo en str.
.
No parece importar si tengo let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
establecido en el .vimrc
.
El problema es que poner declaraciones using
en los archivos de encabezado parece un gran no-no, así que estoy de vuelta al punto de partida.
Lo curioso: yo probamos su prueba y para mí es exactamente lo contrario! str funciona y la temperatura no ... ¿qué versión de ctags estás utilizando por cierto? – UncleZeiv
en realidad la temperatura funciona igual si lo hago ': dejar OmniCpp_DefaultNamespaces = [" std "]' – UncleZeiv
@UncleZeiv: Estoy usando ctags 5.7 en Ubuntu 8.04. Descubrí que no parece importar si he configurado Default_Namespaces. Ver mi edición arriba. –