问题标签 [overload-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 回答
430 浏览

c++ - 更改构造函数优先级

是否可以为所有派生类型和模板构造函数定义构造函数?我写了这个测试用例来说明我的问题:

0 投票
1 回答
1047 浏览

c++ - 可变参数模板函数中的 ostream 重载

我有一个可变参数函数,我想在第一个参数类型上重载。

但是这些函数的行为并不像预期的那样。

这里发生了什么?
为什么不重载分辨率选择我想要的功能?
有没有办法在没有大量元编程的情况下做到这一点?(我能够解决它,std::is_convertible但解决方案比我上面显示的简单代码大得多)。

0 投票
2 回答
1434 浏览

vb.net - vb奇变量使用问题作为文件路径

我有这个功能:

我一直在尝试调整它,以便文件路径成为我可以传递的变量以允许多个存储文件。像这样的东西:

然而,虽然功能 1 有效,但功能 2 却没有——我得到了这个无益的错误:

我通常在 PHP 中工作,以前从未见过这种性质的错误。这是什么意思,我可以重新编写函数以获得我想要的吗?

0 投票
2 回答
3085 浏览

c# - 带有接口的 C# 重载方法行为

可能重复:
C# 4:与可选参数冲突的重载方法

我只是进行了一项小型研究并创建了下一个代码。

我有一个问题,为什么编译器总是选择带有 2 个参数的短方法。当然,所有这些都以相同的方式工作并且没有接口。

谢谢

0 投票
4 回答
2217 浏览

java - Java:运行时方法解析

我正在通过解释器对代码进行一些动态调用,并且我正在进入JLS 第 15.12 节中讨论的方法解析的棘手难看领域。

选择方法的“简单”方法是当您知道所有参数的确切类型时,您可以使用Class.getDeclaredMethod(String name, Class[] parameterTypes). 也许您必须检查方法可访问性和类的超类/超接口。

但这不包括以下任何一种情况,所以它有点没用:

  • 装箱/拆箱原语
  • 亚型
  • 可变参数
  • 一个空参数(可以是任何类型,除非解释器另有说明;在编译时,通过将空转换为类/接口可以消除任何歧义)
  • 原始类型转换(不是 Java 的一部分,但在语言上下文中是允许的 - 例如 Rhino Javascript,其中所有数字都是浮点数,因此 Java 代码可能采用 anint但调用者传入一个数字,即 anint或 a double

(有关前三个的快速示例,请参见下文)

所以现在我必须编写自己的方法解析库......

是否有任何知名的框架库可以帮助实现这一点?

0 投票
1 回答
479 浏览

c# - 为什么 C# 编译器重载解析算法将具有相等签名的静态成员和实例成员视为相等?

让我们有两个签名相等的成员,但一个是静态的,另一个 - 不是:

但是这样的代码生成会带来编译器错误:

类型“Foo”已经定义了一个名为“Test”的成员,具有相同的参数类型

但为什么?

让我们编译成功,然后:

  • Foo.Test()应该输出“静态”

  • new Foo().Test();应该输出“实例”

不能调用静态成员而不是实例一个,因为在这种情况下会发生另一个更合理的编译器错误:

无法使用实例引用访问成员“Foo.Test()”;改为使用类型名称来限定它

0 投票
4 回答
490 浏览

c++ - 为什么这个构造函数重载解析不正确?

这是我的(剥离的)类和一个对象的实例化:

我希望这会调用Carray(size_type, const T&, const Allocator&)构造函数,但事实并非如此。显然这决心template<typename InputIterator> Carray(InputIterator, InputIterator, const Allocator&)

我应该改变什么才能使这项工作按预期进行?我也觉得这很奇怪,因为调用 tostd::vector<int> v(5, 10)工作得很好。如果我查看 GCC 实现中构造函数的定义,我会发现这一点(我重命名了一些编译器实现名称,例如 __n):

这似乎是一样的。

0 投票
2 回答
2793 浏览

c++ - const/non-const 重载解决问题

我有一个看起来像这样的类:

在课堂之外,我调用 Get() 函数。

我希望这会调用公共版本,但 Visual Studio 会出错:

当注释掉受保护的重载并删除对它的所有引用时,代码会编译。

当一个可访问的成员可用时,为什么编译器会尝试使用不可访问的成员?是否有一种公认的方式来强制编译器选择正确的重载?是否在某处引用了成员函数的解析规则?

0 投票
3 回答
265 浏览

c# - 为什么这里需要“this”(扩展方法)?

元注释:不可能搜索“this”这个词。

我刚刚在 ASP.NET 中遇到了一个this需要关键字的奇怪场景。但这不是为了解决局部变量和实例变量之间的问题,就像您在构造函数中看到的那样。

Microsoft.Web.Mvc 包含一个名为 的类ControllerExtensions,我正在使用RedirectToAction(Expression<Action<TController>> action)重载。也许这很特别,因为重载是一种扩展。

RedirectToAction(c => c.Index())不会编译,它说Cannot convert lambda expression to type 'string' because it is not a delegate type. 现在这听起来对我来说就像它认为我正在使用第一个带字符串的重载。

this.RedirectToAction(c => c.Index())编译得很好。我也可以静态调用它,this作为第一个参数传递。

  1. 为什么编译器无法确定我正在寻找接受表达式的重载并使用它?因为该方法需要一个动作的表达式,而不仅仅是一个动作,所以必须涉及。完全不懂 Expressions 命名空间,所以不知道使用这个参数类型的目的。

  2. 不管#1的答案如何,为什么简单地添加可以this解决所有问题?

0 投票
2 回答
3768 浏览

c++ - C++0x const RValue reference as function parameter

I am trying to understand why someone would write a function that takes a const rvalue reference.

In the code example below what purpose is the const rvalue reference function (returning "3"). And why does overload resolution preference the const Rvalue above the const LValue reference function (returning "2").