问题标签 [member-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何在c ++中从不同的类访问类成员变量
我有以下 2 个类头文件(Ah 和 Bh),每个里面都有一个函数:
A类{公共:双f(双);};
B类{公共:双g(双);};
以下是它们对应的cpp文件:
包括“啊”
包括“Bh”
包括“啊”
我想在函数 g(在 B 中)中使用函数 f(来自 A)。我该怎么做呢?
php - __get() 和 __set() 方法的意义是什么
今天我读了一篇关于 MVC 的教程,那个人正在使用魔法方法(__get & __set())来访问一个私有成员值。(链接) 首先我很困惑 __get 和 __set 做什么,但是在阅读了互联网之后,我终于发现,如果无法从外部访问该成员,则会调用此方法。至今...
但是这样的代码没有意义:
我猜我可以使用普通的 getter 和 setter - 它的 IMO 更容易理解:
如果您想使用 __get 和 __set 访问外部成员,您也可以将成员设为公开 - 所以我不明白它的含义。你能告诉我(也许有一个例子)这两种方法的意义是什么?
c# - C#结合MSIL——JIT跳过验证
我正在尝试调用以下 MSIL 方法:
但是,尝试执行该行时会发生此异常:
是的,我知道 JIT 验证,但我已经尝试了很多东西,但它们都不起作用,或者我只是做错了,我不确定。此外,我找不到关于这个主题的太多信息。
我尝试了以下方法(将其中一些结合在一起):
- 向方法添加
[SecurityPermissionAttribute(SecurityAction.Demand, SkipVerification = true)]
属性(也可以使用SecurityAction.Assert
) - 调用
new ReflectionPermission(ReflectionPermissionFlag.MemberAccess | ReflectionPermissionFlag.RestrictedMemberAccess).Demand();
(以及.Assert()
) - 调用
new SecurityPermission(SecurityPermissionFlag.AllFlags).Demand();
(以及.Assert()
)
这些要求和断言都没有引发异常。
为了澄清,这只是一个例子。主要思想是使代码工作并绕过 JIT 的验证。这种特殊的方法不能在没有反射的情况下在 C# 中完成,我想避免它,因为它非常昂贵,但这不是重点。
有什么方法可以让这段代码在 JIT 不抛出 a 的情况下执行TypeAccessException
(比如当你调用一个动态方法时,你true
将skipVerification
参数传递给它的构造函数)?
c++ - clang 和 g++ 都不编译下面的代码片段。为什么?
既不clang
也不g++
编译这个片段:
根据[class.access]/7,我们有:
类似地,使用 A::B 作为基本说明符是格式正确的,因为 D 是从 A 派生的,因此必须推迟对基本说明符的检查,直到看到整个基本说明符列表。
上面的例子和句子是 [class.access]/7 的一部分,至少从 C++11 开始。
c# - 编写封装的父/子数据结构的更简单方法?
有时我发现自己经常写一个“父母”和“孩子”的数据结构,其中:
- 一个父级引用了 0 到 N 个不同的子级。
- 一个孩子有 0 个父母或 1 个父母的参考。
- 引用必须是相互的。对于任何给定的父母,它引用的任何孩子也必须引用给定的父母。对于任何给定的孩子,它引用的父母必须引用给定的孩子。
private
除了使用反射之外,通过使用可从两个类声明(非)外部访问的成员来违反上述规则是不可能的。
在实施这样的事情之前可能采取的心理步骤可能会从这样的事情开始:
当然,这不会编译,因为Parent._children
is private
. 但是,除了私有之外,您不想让它成为任何东西,因为允许外部访问Child
或Parent
可能会违反实现或其他地方的规则。
所以,我想出的一个解决方案是嵌套Child
在Parent
. 嵌套类可以访问其嵌套的类的私有成员:
我要问的问题是,是否有任何替代方法来编写它来实现相同的目标,这些目标比这种方法具有更少或更少的重大缺陷?我发现这种方法的主要缺点是:
- 这可能会导致大型脚本,尽管使用
partial
可以提供帮助。 - 这可能导致比预期更深的嵌套。
- 这可能导致冗长的类名。要访问
Child
外部Parent
,您必须使用Parent.Child
. 在类名很长的情况下,尤其是在使用泛型时,这可能会导致代码非常难看。 - 使用泛型(例如,实现编译时类型安全)可能会变得混乱。这似乎至少部分源于
Child
嵌套Parent<T1>.Child
的事实,Parent<T2>.Child
并且与 .安全性(尽管它可以被封装掉,通常,例如,使用public
访问器所在的非泛型抽象基protected
)。
附带说明一下,这可能是一个很好的例子,说明使用friend
扩展访问权限可以简化这些问题!
c++ - 如果 Outer 类是我的朋友,那么 Outer::Inner 类也是吗?
以下代码在 MSVC 上编译:
因此,似乎如果 Outer 是 Bob 的朋友,那么 Inner 也是自动的。我正在阅读标准的“朋友”一章,但找不到可以确认或反驳这一点的条款。
这是否合法,如果是,章节和经文是什么?
c++ - 允许从特定派生类访问基类成员
在一个项目中,我有一个类层次结构来实现一个具有层次结构级别的图(也就是说,一个图节点可以是一个图本身 - 将其视为一个电子电路,其中一个门实际上可以是一个集成芯片,例如)。因此,我有一些Base
派生到Group
andLeaf
的类,并且该类Base
有一个属性ancestor
,我希望能够从Group
(添加子项时)的给定方法设置它,但不能从其他任何地方设置:
实现这一目标的“正确”方法是什么?通常,我会使用friend
方法,但在我看来,这在这种情况下是不可能的,因为我必须在 中声明朋友Group::setAncestor
,Base
这必须在之前声明。(另请注意,这些声明位于实际代码中的不同文件中。)
c++ - 如何访问模板参数的成员?“会员访问不完整类型”
我正在尝试声明一个类“Lambdas”,它将向另一个类“Test”提供 lambdas(及其类型信息)。Lambdas 还持有对具体 Test 实例的“this”引用,以便在 lambdas 内访问 Test 公共成员。我这样做是为了定义 lambdas 一次,然后通过 decltype() 在其他任何地方推断类型但我得到错误:成员访问不完整类型:
但是如果我要在外部定义 genLambda(),那么我会遇到另一个问题 - 错误:在定义之前不能使用推导类型的 genLambda()!:
c++ - [expr.ref]/1 中脚注的具体含义是什么?
后缀表达式后跟一个点.
或箭头->
,可选地后跟关键字template
(17.2),然后是id-expression,是后缀表达式。计算点或箭头之前的后缀表达式;67该评估的结果与id-expression一起确定整个后缀表达式的结果。
67) 如果类成员访问表达式被求值,子表达式求值发生,即使结果对于确定整个后缀表达式的值是不必要的,例如如果id-expression表示静态成员。
c - 在头文件中使用宏#define for struct member时无法编译c代码
我有两个文件(average.h,average.c)。在我使用的结构的定义中#ifdef INTERNAL
。
average.c 的内容是,
当我尝试编译此代码时, gcc -DINTERNAL -o average.exe average.c 我收到以下错误消息。