Qt Creator的自动完成(intellisense)对std :: vector元素不起作用

sas*_*alm 7 c++ stl autocomplete qt-creator

如何在Qt Creator中自动完成工作std::vector?不工作是正常的吗?

例如,在一个全新的项目中,我创建了一个struct foo { int bar; };.如果我创建一个foo的QVector,intellisense/autocomplete工作正常:

在此输入图像描述

但是在我按下点之后std::vector<foo> v2 没有任何反应v2[0].

我在Qt Creator 3.3.0上,使用Visual Studio编译器工具链(所以STL来自VS,而不是gcc,如果这有任何区别).

编辑:我发现了一个相关的错误报告(关于迭代器) - https://bugreports.qt.io/browse/QTCREATORBUG-1892.我也重现了这个问题.

编辑2:我使用自定义模板类进行了测试:

struct bar {
    int b;
};
template<class T> struct foo {
    T operator [](int a) { return T(); }
};
Run Code Online (Sandbox Code Playgroud)

它工作正常:

在此输入图像描述

Cás*_*nan 5

根据我的评论,根本不可能这样做.您可以提交错误报告,希望他们能够修复它.为了更好地解释,它与std :: vector的实现有关:

reference operator[](difference_type _Off) const
    {   // subscript
    return (*(*this + _Off));
    }
Run Code Online (Sandbox Code Playgroud)

其中referencetypedef为Allocator::reference.显然,Qt Creator在原始课程之后遇到了问题.与QVector相比......

inline T &QVector<T>::operator[](int i)
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::operator[]", "index out of range");
  return data()[i]; }
Run Code Online (Sandbox Code Playgroud)

...直接用T&定义,你可以看出为什么它适用于它.

更新:在向量的cppreference页面上看,似乎在C++ 11之后,引用应该是typedef'ed,只是value_type&.我试过用CONFIG += c++11它来构建,但它仍然不起作用.

另一个更新:托管编写一个不起作用的最小测试用例

template<typename T>
class foo{
public:
    typedef T value_type;
    typedef value_type& reference;
    T a;
    reference operator[](int){return a;}
};

struct bar{int b;};
Run Code Online (Sandbox Code Playgroud)