问题标签 [scope-resolution]
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++ 中为 std 命名空间使用完全限定名称
如果 C++ 中的名称不是完全限定的,例如std::cout
,它可能会导致意外错误,例如在https://en.cppreference.com/w/cpp/language/qualified_lookup中提到的。但是正如我所注意到的,为命名空间使用完全限定名称::std
eq::std::cout
是非常罕见的。
是否有任何理由::std
不使用命名空间的完全限定名称?
为自己创建的命名空间使用完全限定名称又如何呢?这是个好主意吗?
c++ - 模板化继承中的范围解析(可能是所谓的 mixin)
假设我有模板类
在模板化类的定义内部A4
,至少在只使用实例类型时A4<A3<A2<A1>>>
,似乎可以引用x
为
或者
或者
问题1:这些是等价的吗?A4
好吧,我想我可以从孤立地查看模板类的角度来看它们并不等同。为了Context::A1::x
工作,它的模板参数应该包含一个x
. 为了this->A1::x
工作,它应该包含一个名为 的范围A1
,而该范围又应该包含一个x
. 并且为了A1::x
工作,A4
其自身的范围应该包含一个名为A1
contains的范围x
。我的意图是从 type 的角度询问它们是否等效 A4<A3<A2<A1>>>
。
注意: gcc 8.2 with-O03 -std=c++17
在每种情况下都产生相同的汇编代码。也就是说,我只用函数func
,gunc
和hunc
只调用了对应的函数之一来编译代码,这个编译器生成了相同的可执行文件。当然,严格来说,这并不一定意味着对于抽象语言,这些表达式是等价的。
问题二:x
在每种情况下,作品范围的“拆包”是如何进行的?也许这个问题没有意义,或者不是我想问的。特别是如果问题 1 的答案是它们是等价的。请允许我在找到有关问题 1 的更多信息后修改此问题,或先忽略此问题。
问题 2 的注释:这个观察结果可能会澄清为什么我不确定拆包是如何工作的。如果在模板类中A4
我们还有一种方法
然后编译失败
所以,至少在创建gcc
类型实例的那一刻,A4
它的模板参数的模板参数不是一个有效的名称(或者我没有在 中正确命名Context::Context::A1::x
)。
php - PHP:如何在另一个类中创建可通过 ::(双冒号,范围解析)访问的函数
我正在尝试创建一个日志记录类,可以通过以下方式在 PHP 应用程序周围的所有类中访问它
这会将下一行添加到我的日志文件中(插入文件的部分对我来说很容易)。我在DIBI(数据库框架)中看到了双冒号。这很酷,因为我可以在任何需要的地方使用 dibi::dataSource("") 。但不知道如何在我的应用程序中执行此操作。
现在我在某个类中有一些东西(我在应用程序中有更多类似的类),比如(短路):
在 index.php 我有类似的东西:
而且我想在 index.php 中有一些代码,这将在类中添加“logger::log();”的日志记录功能的可访问性。但不知道如何做到这一点。你能帮我么?
也许它可以以某种方式与“扩展”一起工作,但有没有更简单的解决方案?我试图阅读 - https://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php但仍然不确定,如何做到这一点。
谢谢你。