gpt4 book ai didi

c++ - Qt Creator 的自动完成(智能感知)不适用于 std::vector 元素

转载 作者:可可西里 更新时间:2023-11-01 18:28:06 26 4
gpt4 key购买 nike

如何使 Qt Creator 中的自动完成功能适用于 std::vector ?不工作正常吗?

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

enter image description here

但是对于 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(); }
};

它工作正常:

enter image description here

最佳答案

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

reference operator[](difference_type _Off) const
{ // subscript
return (*(*this + _Off));
}

其中 reference 被类型定义为 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]; }

...这是直接根据 T& 定义的,您可以看到它为什么适用。

更新:查看 cppreference's page on vector ,似乎在 C++11 之后,引用应该被类型定义为简单的 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;};

关于c++ - Qt Creator 的自动完成(智能感知)不适用于 std::vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com