c++ - 为什么在我使用模板时 VS 不自动完成?

标签 c++ visual-studio templates autocomplete

我正在使用模板处理 C++ 中的一些数据结构,但遇到了一些问题。我正在使用链接实现哈希表,还实现了链表。我遇到的第一个问题是模板定义的链接错误,它我通过包含 .cpp 来解决声明所在的文件。

现在我遇到了另一个问题,我不确定它是否与模板或 VS 设置有关。首先,构建项目不会更新它,除非我出于某种原因保存并编译我的入口点.我读了一些问题,设置似乎没问题。 我遇到的最重要的问题是在我的 Hashtable.cpp 中文件 我有与我的 List 相关的任何内容的自动完成问题类。

例如: 我用了List<T> **arr在我的 Hashtable类以及每当我尝试使用任何列表方法时,例如arr[1]->insert(100)不仅它不会自动完成,而且它说该方法属于我在下面的屏幕截图中显示的。 声明如下所示: Hashtable.h :

#pragma once
#include "Log.h"
#include "List.h"
#include <vector>
#include <iostream>

Hashtable.cpp : #include "Hashtable.h"

我的列表类除了iostream 没有包含任何特殊内容等等

我想指出代码不会自动完成但它可以工作,它运行正确的方法但是使用起来真的很不舒服和烦人。我还担心它可能无法在另一台计算机上工作,这真的很重要大部头书。 您知道哪里出了问题吗?

截图我mentioned

最佳答案

自动完成被模板弄糊涂了。请记住,当编译器编译模板化代码时,它知道模板参数是什么。相反,当您在模板类中编写代码时,自动完成系统不知道参数是什么。

例如,如果您有 List<T> **arrList有一个 insert()方法,是arr[1]->insert(100)有效的?或许!或者可能不是。可能有 List 的特化对于特定的 T ,它没有 insert方法。

此外,自动完成系统往往既是一门艺术,也是一门科学,因为它们必须以交互速度运行,并且需要对代码早期的语法错误具有鲁棒性。模板使它们处于最糟糕的境地,因为模板的句法和语法比 C++ 的其他领域要正确得多,因此在处理大量模板化代码时,您往往会看到自动完成表现最差。

在处理高度模板化的代码时,我有时会在处理代码时“去模板化”代码,只是为了帮助编译器。 VS 的最新版本实际上可以帮助您解决这个问题:编译器认为令人困惑的模板可能(通常,但不总是,我不确定为什么)为您提供帮助解决问题的机会:

enter image description here

如果你点击那个<T>图标,它会要求你给它一个类型的例子,你可以用它来实例化它,并将该类型用于自动完成。这可以显着提高其有效性。

关于c++ - 为什么在我使用模板时 VS 不自动完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293251/

相关文章:

visual-studio - MSBuild 适用于具有 native 和托管项目引用的项目

asp.net - 对资源文件禁用 Visual Studio 的访问修饰符下拉选项

c++ - 如何使用 googletest 失败进入断点

scala - Play 框架 Scala 模板

c++ - 引用类型的专用函数模板

使用模板的 C++ 树集实现

c++ - 链表中的运行时错误

c++ - 使用 C++ 和 Qt 链接到网络驱动器

c++ - typedef void FOO 与 #define FOO void 在函数签名中的含义

c++ - 尽管可见,但未设置静态变量