为什么Visual Studio的智能感知显示私有成员和功能?

Why does Visual Studio's intellisense show private members and functions?

本文关键字:成员 功能 显示 Studio Visual 智能 感知 为什么      更新时间:2023-10-16

在Visual Studio中使用本机c++时,即使在包含类的范围之外,intellisense也会显示私有成员和函数。这使得很难为我编写的类创建干净的API。

这是有原因的吗?这是可以预防的吗?

为什么不同时显示私有的呢?毕竟,他们是成员,他们是存在的,与其他成员一样,他们可以从特定的环境中完全接触到。

IntelliSense很难确定成员是否可以从这个特定的上下文中访问,特别是如果你考虑到在大多数情况下这个上下文还不完整(用户仍在键入),这意味着通常不可能对其进行分析。

原因可能只有微软知道。(我认为Intellisense目前不会检查你在哪里,所以它不知道你是在类内(可以访问私人成员)还是在外)

事实上,我不知道是否或如何预防
但据我所知,他们有一个带锁的图标,所以你知道他们是私人的。也许这有助于

不幸的是,这只适用于您制作的任何东西,但如果您使用大量自己的库,仍然需要记住这一点。

对于我制作的任何库,我都做了一件事,那就是试图用#define欺骗intellisense。在我正在制作的任何库的头文件中的类声明中,我将整个私有部分包围在#ifdef空间中,例如

#ifdef MYCLASS_SHOW_PRIVATE_VARIABLES
private:
    int hideThisVariable;
    float noShow;
    void HiddenIncrementFunction();
#endif

然后,在类的代码部分,我需要为所有方法提供定义,在包括带有类声明的文件之前,在顶部添加

#define MYCLASS_SHOW_PRIVATE_VARIABLES

这样,私有成员只对源文件中为类实现的方法可见。任何使用此库的客户端都无法通过intellisense查看私有变量,当然,除非它们碰巧定义了您的预处理器指令。