为通用而定义的功能参数的术语,不是特定的

时间:2018-11-21 08:38:00

标签: function parameters

这个技术有术语吗?一个著名的例子是WinAPI:SendMessage( hwnd, msg, info1, info2 ),其中参数#3和#4仅对msg有意义(这意味着在某些情况下,只需要这两个参数之一或不需要)。 See MSDN

改写:具有一个始终接受多个参数的通用函数,但是解释它们取决于先前的参数。我不想谈论开放数组,开放参数,无类型参数……我知道这些。这不是我要的-我想使用这种类型的函数(可能还包括如何调用非特定参数的术语)。


这与强制转换或通过引用传递无关-参数类型始终相同。其他示例:calculate( char operation, int a, int b )然后用作

  1. calculate( '+', 2, 5 )(参数#2和#3是被加数)
  2. calculate( '/', 4, 2 )(参数2是除数,参数3是除数)
  3. calculate( '!', 3, 0 )(参数#2是阶乘,而参数#3未使用)

在所有这些情况下,数据类型始终相同且从不强制转换。但是参数#2和#3的含义因参数#1而异。既然是这种情况,就很难给这些参数起一个有意义的名字。 当然,该函数本身很可能使用 switch(),但这与我的问题无关。如何调用参数#2和#3,在其中找不到不同的名称,但数据类型始终相同?

3 个答案:

答案 0 :(得分:1)

msg参数通过简单的switch语句“更改”参数。开关中的每个“ msg”都知道所需的参数(带有类型),并对其进行适当的转换。

此“ 技术”称为按引用传递或按地址传递。后者通常用于方法指针。

如果您要输入的是特殊名称,这是常规功能,方法或过程。

所引用的函数是Win32 API函数,可以称为“ Windows函数调用”。

答案 1 :(得分:0)

这是一个静态参数和多个动态参数的示例。 静态是“ msg”,动态是如下:

这些参数是通用指针。通过引用。它们可以指向任何数据类型或没有值,即空指针。由发送方将内存锁定在适当的位置,由接收方方法正确地解释指针(通过指针强制转换)。

这是无类型参数传递的示例。唯一传递的是内存地址。这样做很危险,因为传递的类型必须提前约定(按照约定,而不是像键入的语言构造那样进行约定),并且必须在调用的两侧进行匹配。

这在C ++之前是很普遍的,在C时代,我们只有C结构可以传递。导致许多常规故障保护错误。从那时起,类型化接口大部分已通过库替换了通用等效项。但是底层的Win32方法保持不变。自其诞生以来,主要的重大变化是接受64位指针。

答案 2 :(得分:0)

尽管未得到广泛支持,但是您所指的将是依赖类型的函数(或依赖类型的参数)。

引用wikipedia on dependent types

  

“整数对”是一种类型。由于对值的依赖性,“第二对大于第一对的整数对”是从属类型。

参数的类型可能取决于值。 info1的类型取决于值msginfo2也取决于值。

为了使这种方法能够在没有依赖类型的语言中工作,为依赖参数指定了非常通用的类型,只有在有更多信息可用时,才会稍后对其进行细化。仅在运行时知道msg的类型时,才假定info1info2的类型。即使该语言不允许您表达这种依存关系,我仍会将该方法称为依存类型。