Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Visual Studio';s intellisense是否显示私有成员和功能? 在VisualStudio中使用本机C++时,即使在包含类的范围之外,It明智也会显示私有成员和函数。这使得我很难为我编写的类创建干净的API_C++_Visual Studio 2010 - Fatal编程技术网

为什么Visual Studio';s intellisense是否显示私有成员和功能? 在VisualStudio中使用本机C++时,即使在包含类的范围之外,It明智也会显示私有成员和函数。这使得我很难为我编写的类创建干净的API

为什么Visual Studio';s intellisense是否显示私有成员和功能? 在VisualStudio中使用本机C++时,即使在包含类的范围之外,It明智也会显示私有成员和函数。这使得我很难为我编写的类创建干净的API,c++,visual-studio-2010,C++,Visual Studio 2010,这有什么原因吗?这可以防止吗?原因可能只有微软知道。(我认为Intellisense目前不检查您在哪里,因此它不知道您是在类内(并且可以访问私有成员)还是在类外) 实际上,我不知道是否可以或如何预防。 但据我所知,他们有一个带锁的图标,所以你知道他们是私人的。也许这会有帮助。那么,为什么不把私人的也展示出来呢?毕竟,它们是成员,它们是存在的,它们可以从特定的上下文中完全访问,就像任何其他成员一样 IntelliSense很难确定成员是否可以从此特定上下文访问,特别是如果您考虑到在大多数情况下,此

这有什么原因吗?这可以防止吗?

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

实际上,我不知道是否可以或如何预防。

但据我所知,他们有一个带锁的图标,所以你知道他们是私人的。也许这会有帮助。那么,为什么不把私人的也展示出来呢?毕竟,它们是成员,它们是存在的,它们可以从特定的上下文中完全访问,就像任何其他成员一样


IntelliSense很难确定成员是否可以从此特定上下文访问,特别是如果您考虑到在大多数情况下,此上下文尚未完成(用户仍在键入),这意味着通常无法对其进行分析。

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

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

#ifdef MYCLASS_SHOW_PRIVATE_VARIABLES
private:
    int hideThisVariable;
    float noShow;
    void HiddenIncrementFunction();
#endif
然后,在类的代码部分,我需要为所有方法提供定义,在顶部,在包含带有类声明的文件之前,我添加了

#define MYCLASS_SHOW_PRIVATE_VARIABLES

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

@Keoki我会更努力一点:)当客户端使用您的代码时,您是否试图阻止这种情况发生?我怀疑那是可能的。如果它是MSVC中的一个设置,那么每个使用您的API的人都需要打开它。@Keoki:有些第三方Intellisense解决方案,如Visual Assist X,是有的,但Visual Studio中没有内置。当然,这是可以防止的。C++中的智能感知远不如.NET项目那么好。给出了,我确信C++实现更困难。E.S.:在VC 2010中使用了吗?在这一点上,它与网络相当。”比利:实际上这是一个很好的观点,我很有趣。昨晚我第一次使用VC10,背景编译和intellisense都非常好。这是一个C项目,不是C++,但仍然很好。我想我将学会如何适应它。智能感知是如此有生产力,因为它缩小到最可能的范围。如果每次您开始键入时,它都会在每个程序集中的每个命名空间中显示每个类,那么它就不会那么有效了。相反,它的工作是尽可能缩小范围。它将仅显示当前加载的程序集和当前导入的命名空间中的类型。当选择成员时,它应该只显示范围内的成员,即那些可公开访问的成员。-1 Visual Studio使用EDG编译器前端作为其IntelliSense支持。在任何给定的上下文中,确定任何给定符号的访问级别并不困难。EDG提供了一个完整的AST。@IInspectable:误导。仅分析类是不够的(即使类定义已完成)。还需要分析当前上下文并确定其访问权限。而且,正如我上面所说的,无论使用的前端是什么,这通常都是不可能的,因为当前的上下文通常在语法上都不完整。伙计,这不会根据定义是否存在而改变类的大小吗?如果有人把你的课程分配给stack,你就完蛋了。主意曾经找一个合适的工具,可以调整以提供您感觉舒适的信息。不要调整代码来补偿糟糕的工具。不要以完全破坏代码的方式更改代码。