问题标签 [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.

0 投票
2 回答
1554 浏览

c++ - 在 C++ 中为 std 命名空间使用完全限定名称

如果 C++ 中的名称不是完全限定的,例如std::cout,它可能会导致意外错误,例如在https://en.cppreference.com/w/cpp/language/qualified_lookup中提到的。但是正如我所注意到的,为命名空间使用完全限定名称::stdeq::std::cout是非常罕见的。

是否有任何理由::std不使用命名空间的完全限定名称?

为自己创建的命名空间使用完全限定名称又如何呢?这是个好主意吗?

0 投票
2 回答
134 浏览

c++ - 模板化继承中的范围解析(可能是所谓的 mixin)

假设我有模板类

在模板化类的定义内部A4,至少在只使用实例类型时A4<A3<A2<A1>>>,似乎可以引用x

或者

或者

问题1:这些是等价的吗?A4好吧,我想我可以从孤立地查看模板类的角度来看它们并不等同。为了Context::A1::x工作,它的模板参数应该包含一个x. 为了this->A1::x工作,它应该包含一个名为 的范围A1,而该范围又应该包含一个x. 并且为了A1::x工作,A4其自身的范围应该包含一个名为A1contains的范围x我的意图是从 type 的角度询问它们是否等效 A4<A3<A2<A1>>>

注意: gcc 8.2 with-O03 -std=c++17在每种情况下都产生相同的汇编代码。也就是说,我只用函数func,gunchunc只调用了对应的函数之一来编译代码,这个编译器生成了相同的可执行文件。当然,严格来说,这并不一定意味着对于抽象语言,这些表达式是等价的。

问题二:x在每种情况下,作品范围的“拆包”是如何进行的?也许这个问题没有意义,或者不是我想问的。特别是如果问题 1 的答案是它们是等价的。请允许我在找到有关问题 1 的更多信息后修改此问题,或先忽略此问题。

问题 2 的注释:这个观察结果可能会澄清为什么我不确定拆包是如何工作的。如果在模板类中A4我们还有一种方法

然后编译失败

所以,至少在创建gcc类型实例的那一刻,A4它的模板参数的模板参数不是一个有效的名称(或者我没有在 中正确命名Context::Context::A1::x)。

0 投票
2 回答
108 浏览

php - PHP:如何在另一个类中创建可通过 ::(双冒号,范围解析)访问的函数

我正在尝试创建一个日志记录类,可以通过以下方式在 PHP 应用程序周围的所有类中访问它

这会将下一行添加到我的日志文件中(插入文件的部分对我来说很容易)。我在DIBI(数据库框架)中看到了双冒号。这很酷,因为我可以在任何需要的地方使用 dibi::dataSource("") 。但不知道如何在我的应用程序中执行此操作。

现在我在某个类中有一些东西(我在应用程序中有更多类似的类),比如(短路):

在 index.php 我有类似的东西:

而且我想在 index.php 中有一些代码,这将在类中添加“logger::log();”的日志记录功能的可访问性。但不知道如何做到这一点。你能帮我么?

也许它可以以某种方式与“扩展”一起工作,但有没有更简单的解决方案?我试图阅读 - https://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php但仍然不确定,如何做到这一点。

谢谢你。