Closed West-Pavilion closed 4 months ago
编辑器无法推断出对非容器类的迭代器使用 解引用运算符"*" 或 箭头访问运算符"->" 产生的类型
例如,请考虑如下的 C++ 代码:
#include <filesystem> #include <iostream> /* 编辑器无法推断出对非容器类的迭代器使用 解引用运算符"*" 或 箭头访问运算符"->" 产生的类型 */ int main() { std::filesystem::path path("."); std::filesystem::directory_iterator iter(path); /* directory_iterator 对运算符 "->" 和 "." 的声明如下: * const std::filesystem::directory_entry& operator*() const; * const std::filesystem::directory_entry* operator->() const; */ /* 使用 "*" 访问该迭代器指向的对象时,有补全提示,但不正确 */ // (*iter). /* 使用 "->" 访问该迭代器指向的对象时,没有补全提示 */ // iter-> std::system("chcp 65001"); /* 使用基于范围的 for 循环输出当前目录下的所有文件名 */ for (auto i : iter) { /* 这里的 i 没有补全提示,因为编辑器暂时还不支持对非容器类的迭代器的访问 */ // i. if (!i.is_directory()) { std::cout << i << std::endl; } } }
如下图所示,由于 (*iter) 的返回类型是 const std::filesystem::directory_entry&,所以编辑器给出的补全提示是不正确的
如下图所示,使用箭头运算符 "->" 访问 iter 时,编辑器不会显示其对应的补全提示
如下图所示,在基于范围的 for 循环中,对 auto 类型的范围变量,编辑器无法推断出其具体类型
下面是对应的测试代码:
编辑器无法推断出对非容器类的迭代器使用 解引用运算符 或 箭头访问运算符 产生的类型.zip
一直都不支持模板类型推断。
对下面这两种情况的类型推断,小熊猫C++不仅支持,而且十分精准且强大
图中使用的测试代码:
小熊猫C++支持对容器类的迭代器的类型推导.zip
很简单,你把标准库头文件里所有的std都替换成随便一个什么东西,然后再试试
好有意思,把 std 换成另一个名字后,前面说的类型推断就不会生效了
此 issue 暂时关闭,等到时机成熟再次开启
编辑器无法推断出对非容器类的迭代器使用 解引用运算符"*" 或 箭头访问运算符"->" 产生的类型
例如,请考虑如下的 C++ 代码:
如下图所示,由于 (*iter) 的返回类型是 const std::filesystem::directory_entry&,所以编辑器给出的补全提示是不正确的![屏幕截图(384)](https://github.com/royqh1979/RedPanda-CPP/assets/111393157/d458426f-dd90-469d-ae84-64a4c42d940e)
如下图所示,使用箭头运算符 "->" 访问 iter 时,编辑器不会显示其对应的补全提示![屏幕截图(385)](https://github.com/royqh1979/RedPanda-CPP/assets/111393157/da3c1772-28ff-443b-8b9b-72bd98b07ab7)
如下图所示,在基于范围的 for 循环中,对 auto 类型的范围变量,编辑器无法推断出其具体类型![屏幕截图(386)](https://github.com/royqh1979/RedPanda-CPP/assets/111393157/a941a4e1-0d77-468f-98db-fea9e7aced6a)
下面是对应的测试代码:
编辑器无法推断出对非容器类的迭代器使用 解引用运算符 或 箭头访问运算符 产生的类型.zip