|
|
1
8
下面是一个使用复合文字和可变宏的C99解决方案:
|
|
|
2
6
你可以用C++仿真这个:
但我不值得这么做。锅炉板太多。 如果我记得正确的话,Stroustrup的书“C++的设计和演化”包含了一个讨论“命名参数”的特征请求的章节。结论大致是:不是个好主意。如果你想知道细节,就去看看。 |
|
|
3
6
C中不支持命名参数,但可以使用variadic函数模拟命名参数(尽管您释放了类型安全性):
只需记住以空结束可选参数列表。也可以使用一些枚举作为键,而不是字符串。 例如,该技术在GTK+中使用: |
|
|
4
3
这在香草C或C++中是不可用的。但是,有一个C++升压库,可以让您为编写的函数这样做: Boost.Parameter . 借用他们的一个例子,它的用法是这样的:
然而,为您的函数实现这一点看起来确实有点复杂。你可能会认为这不值得付出努力。 |
|
|
5
1
不,在C或C++中不能按名称传递参数。 两种语言都支持 拖尾 函数中的参数。也就是说,函数的任何参数都可以有默认值,但在找到第一个默认值之后的所有后续参数也必须有默认值。 例如,以下各项均有效:
但以下各项均无效:
原因很简单:因为在C和C++中不能按名称传递参数,所以知道使用默认值的哪些参数和使用传递值的唯一方法是将传递的值按顺序分配给参数,然后使用剩余的默认值(按顺序)。 因此,以下调用使用上述函数是有效的:
|
|
|
6
0
以非笨拙的方式获取返回值更困难。 这将允许您做一些非常愚蠢的事情(我讨厌这样做),例如为参数指定默认值:
如果您这样做,将失败:
因为在宏扩展中
这个
如果宏是用默认参数定义的,
这迫使您列出所有参数(或者至少是导致合法C的一些参数——您可能已经列出了第二个参数,但无论如何都可以这样做),以便使用这个宏。 我认为您应该能够为列出变量参数的宏/函数扩展此函数的最后一个版本,但是可选参数仍然必须在列表的末尾传递,并且在获得可选参数之前,您必须使用所有必需的点。 |
|
|
7
-1
C++解决方案: 您可以使用boost::any、std::map和std::string创建带有可设置位置参数的对象。
|
|
|
DarkLite1 · 在提升模式下使用多个命名参数调用脚本 8 年前 |
|
|
Micolho · execute或字符串%s传递的查询参数之间的差异 8 年前 |
|
|
Rohit Kumar · 扩展类时构造函数出错 8 年前 |
|
|
user9489003 · ruby中proc的参数 8 年前 |
|
O.rka · 使用参数[重复]创建bash函数时出现语法错误 8 年前 |