问题标签 [argument-dependent-lookup]

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 回答
90 浏览

c++ - 模板化函数名称查找难题 (ADL)

鉴于以下代码,为什么调用 Generic 函数而不是更具体的基于 SomeClass 的函数?

注意:如果我要从 " void foo(const SomeClass<T>*)" 定义中删除 const,则会调用所需的函数。我也尝试过重新排列 foo,尽管它没有任何影响。如果可能的话,请一些人引用标准中描述此特定 ADL 场景的相关区域。

带常量:http: //ideone.com/DIchLl

没有常量:http: //ideone.com/Iam4LV

使用 const(第 1 次):http: //ideone.com/W6PoJw

0 投票
5 回答
308 浏览

c++ - 为什么当我不使用两个指针调用时,swap() 可以很好地工作?

上面是一个测试样本。我发现如果我使用swap(array[1], array[4]);,它还会交换数组中两个位置的值。但这让我很困惑,因为该函数swap()需要两个指针,而不是两个整数值。

谢谢你的帮助:)

0 投票
1 回答
545 浏览

c++ - ADL 不查找静态成员函数吗?

这是来自参数依赖查找是否也只搜索名称空间或类的后续问题, 其中@David Rodríguez 说“ADL 将查看类型的封闭命名空间,以及类型本身”。我可能听错了他试图说的话,但我正在尝试这个例子:

它不编译,产生错误 " 'bar' is not declared in this scope " 。ADL是否不考虑静态成员函数?我的意思是在示例关联类中foo,ADL 不会查看类内部吗?. 任何人都可以在这里简化规则吗?

0 投票
5 回答
184 浏览

c++ - 在什么情况下,参数依赖名称查找 (ADL) 会起作用?

Wikipedia 文章中提到了以下引用:

只有在正常查找非限定名称时找不到匹配的类成员函数时,才会发生 ADL 。在这种情况下, 可以搜索在正常查找期间未考虑的其他名称空间,其中要搜索的名称空间集合取决于函数参数的类型

所以,我期待下面的程序编译得很好,但它没有

我在 SO 中搜索了几个问题,但找不到哪个以简单的单词列出了要求或情况,这表明:ADL​​ 何时开始?
更详细的答案对我和未来的访客真的很有帮助。

0 投票
1 回答
431 浏览

apache-flex - 使用 Maven/FlexMojos 4.2 beta 运行 AIR 应用程序测试

我有 Maven 模块,它是一个 AIR 应用程序。我使用 FlexMojos 插件(4.2-beta 版)。

编辑进一步调查显示问题是用于测试的描述符TestRunner.xml具有 AIR 2.6 命名空间,而我adl的是 3.6 版。因此,我需要一种方法来控制这个版本或整个描述符。

运行测试目标时,我总是收到此错误:

[ERROR] Failed to execute goal org.sonatype.flexmojos:flexmojos-maven-plugin:4.2-beta:test-run (default-test-run) on project mobile-app: Unexpected return code 9

这是我的构建配置(flex.sdk.version=4.5.1.21328

使用mvn test -X,我可以看到调用了 ADL:

[DEBUG] [LAUNCHER] exec: [adl] - /XXX/mobile-app/target/test-classes/TestRunner.xml

据我所知,来自 adl 的错误代码 9 表示:The main application content file is not a valid SWF or HTML file..

我错过了什么?任何帮助表示赞赏!

0 投票
2 回答
270 浏览

c++ - 解决依赖于参数的查找歧义的非侵入式方法

这是我的情况:

我正在尝试使用具有 typeFoo::a并指定 a的库Foo::swap。我正在使用的另一个库有一个std::vector<Foo::a>实例化。我正在尝试使用 Visual Studio 11.0 在 Windows 上编译它,并注意到std::vector::swap映射到_Swap_adl它执行不合格的交换调用。

这就是让我陷入 ADL 和模棱两可的功能解决方案的问题。是否有一些魔法可以让我使用Foo::swap(甚至std::swap:)),而无需对我正在使用的库进行一些“重大”更改(缺少从 Foo 删除/重命名交换等的东西)?

编辑:添加一个最小的例子来捕捉正在发生的事情和错误。

我不会评论代码的效率,因为它只是我必须使用的东西,但@http: //pastebin.com/Ztea46aC上的错误日志可以很好地了解内部发生的情况。这是编译器特定的问题,还是可以从这段代码中获得更深入的学习?

编辑2:我已经尝试专门针对有问题的特定类型,但这并不能解决歧义。关于为什么会这样的任何指示也会有所帮助。

http://pastebin.com/sMGDZQBZ是这次尝试的错误日志。

0 投票
1 回答
1234 浏览

c++ - 模板中的参数相关查找

我对模板上下文中的函数名查找感到困惑。我知道编译器会延迟模板化代码中与参数相关的标识符查找,直到模板被实例化。这意味着您有时可能会遇到语法错误或在模板代码中调用不存在的函数,除非您实际实例化模板,否则编译器不会抱怨。

但是,我发现不同编译器之间存在差异,我有兴趣了解标准本身的要求。

考虑以下代码:

请注意,模板成员函数Foo::bar调用了一个不依赖于参数的全局函数do_something,它甚至还没有被声明

然而,GCC 4.6.3 将愉快地编译上述程序。运行时,输出为:

这是一个ideone链接

因此,看起来编译器将标识符查找延迟到模板实例化之后,此时它能够找到do_something.

相反,GCC 4.7.2不会编译上述程序。它产生以下错误:

因此,GCC 4.7.2 知道do_something稍后声明,但拒绝编译程序,因为do_something它不依赖于参数。

所以,我假设 GCC 4.7.2 在这里可能是正确的,而 GCC 4.6.3 是不正确的。所以大概,我需要在定义do_something之前声明。Foo::bar这个问题是假设我想允许我的类的用户通过实现他们自己的重载Foo来扩展. 我需要写一些类似的东西:Foo::bardo_something

do_something这里的问题是,从内部看不到的重载Foo::bar,因此从未调用过。所以即使我调用do_something(int),它也会调用do_something(T)而不是重载 for int。因此,对于 GCC 4.6.3 和 GCC 4.7.2,上述程序输出:

那么这里有哪些解决方案呢?如何允许用户Foo::bar通过实现自己的重载来扩展do_something

0 投票
1 回答
167 浏览

c++ - Understanding the scope of operators in C++

I define an operator<< in the Foo namespace. Why it can be called from the global scope?

0 投票
2 回答
206 浏览

c++ - ADL 是否适用于命名的 lambda?

假设我在一个命名空间中有一个类和一个命名的 lambda。

此 lambda 几乎等同于已声明为内联的函数。但是我可以从另一个不相关的命名空间调用那个 lambda,而不bla使用 ADL(参数相关查找,也称为 Koenig 查找)提及命名空间吗?

0 投票
3 回答
533 浏览

c++ - 为什么 B::f 不能解决歧义,但 A::f 可以?

为什么 B::f 不能解决歧义,但 A::f 可以?