加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 20:02:55 所属栏目:安全 来源:网络整理
导读:当使用vim插件YouCompleteMe C代码完成我偶然发现了一个问题。 使用嵌套模板类可以使完成正常工作。 考虑下面的例子来重现行为: #include vectortemplateclass Tclass foo { public: void Init(); private: struct bar { int foobar; }; bar one_bar; std::
当使用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"
}

“some_bars”的代码完成不工作,而“one_bar”正常工作。

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

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

编辑:
有类似的问题报告在YCMs错误跟踪:
https://github.com/Valloric/YouCompleteMe/issues/243
https://github.com/Valloric/YouCompleteMe/issues/530

似乎是一个bug在clang而不是在ycm。有人可以确认吗?

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

目的是获得更多关于clang中的bug的信息,最后是在clang问题跟踪器中生成一个bug报告。

编辑3:
我遵循从RedX提出的程序,并喂我的代码在clang获得完成。
Clang没有为代码中讨论的位置提供任何建议。
这明显是为什么YCM没有在vim中提出建议的原因,它与YCM或vim无关。

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

我认为,根据C的规则,你不能在这种情况下得到完成。

没有类型T的知识,我们不知道什么方法std :: vector< T>将有,因为每个instansiation的一个模板在C可以有不同的方法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读