如何使用YouCompleteMe在vim中启用C++模板类的完成

Phi*_*hil 25 c++ vim templates clang code-completion

当使用vim插件YouCompleteMe进行C++代码完成时,我偶然发现了一个问题.使用嵌套模板类可以使完成无法正常工作.

请考虑以下示例来重现行为:

#include <vector>

template<class T>
class foo {
  public:
  void Init();

  private:
  struct bar {
    int foobar;
  };
  bar one_bar;
  std::vector<foo<T>::bar> some_bars;
};

template<class T>
void foo<T>::Init(){
  one_bar.foobar = 0; // completion as expected
  some_bars.at(0).foobar = 0; // no completion neither for "at" nor for "foobar"
}
Run Code Online (Sandbox Code Playgroud)

"some_bars"的代码完成根本不起作用,而"one_bar"的行为与预期一致.

如何完成此代码的完成工作?这个问题是否与设置有关并且实际上应该有效还是YCM中的错误?

我的系统是基于debian的jessie/sid,vim版本7.4,来自GitHub的YCM最新版本.

编辑:YCMs bug跟踪器中报告了类似的问题:https : //github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530

似乎是铿锵而不是YCM中的错误.有人能证实吗?

编辑2:我在YCM问题跟踪器中打开了另一个问题. https://github.com/Valloric/YouCompleteMe/issues/1170

目的是获得有关clang中的错误信息的更多信息,最后在clang问题跟踪器中进行错误报告.

编辑3:我按照RedX的建议程序,在clang中输入我的代码以获得完成.Clang没有为代码中讨论的位置提供任何建议.这显然是YCM未能在vim中提出建议的原因,它与YCM或vim无关.

已提交clang问题跟踪器中的错误报告:http: //llvm.org/bugs/show_bug.cgi?id = 20973

Chr*_*son 3

我认为,根据 C++ 的规则,在这种情况下你无法完成。

如果不了解 type T,我们就不知道std::vector<T>会有哪些方法,因为 C++ 中模板的每个实例化都可以有不同的方法。