在C++中模拟函数的关键字参数

Hacker News Top 工具

摘要

本文演示了一种通过使用带有指定初始化器的结构体来模拟Python风格关键字参数的技术,无需宏或模板魔法即可提高代码可读性。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/12 02:53

# 在C++中模拟函数的关键字参数 来源:https://nibblestew.blogspot.com/2026/06/faking-keyword-arguments-to-functions.html Python的众多优秀语言特性之一就是关键字参数。它们使得某些类型的API简洁且可读。如下所示: [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipxolHgFLDFeecuGLIStC9PHsYEy2ORmWmYmGLW3OAR562zUbR5Yl3RtBcdwHDCrPB7gUBBQUzVR-GrRJr4ZTzbGiLoRXUzYKa_KIzL0qnCsY9_DZOTvlW92oJKv0P6RWx4gl1vkUzGtBOX_JYK2-L3SyXoBrDwypMLjG24g8N8rtQQngNvcLiPdoJ_Bs/s1454/python_kwargs.png) 遗憾的是,C语言没有关键字参数,因此C++也没有。将其作为语言特性添加将需要15-20年的努力,其中大部分时间将花在通过电子邮件说服人们这样的特性很重要且应该被添加。 曾经有人尝试通过宏和模板魔法来实现这一点(链接 (https://www.boost.org/doc/libs/latest/libs/parameter/doc/html/index.html)),但由于它们使用了宏和模板魔法,所以并未得到广泛使用。然而事实证明,借助现代语言特性,你可以相当令人信服地模拟关键字参数。如下所示: [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2a2DpfVw3HgiPZ5YMC3ppEOpBRy7At4tsGbRVGgP89w-fwV0VojJzk2rSzMWtu2vLkU_YJjVPW3qcLI86pVcOuizA-HFiNocqnMI9p75JkX4_yfRYjyUThm8nsnmpkD5rnsani1R8Z5BoSsd8POUVAfHGMBlSpAo9unaAGHHW5kt1e_g5CUQbH6K21E/s910/cpp_kwargs.png) `add_argument`方法接受一个参数,这个参数是一个结构体。括号内额外的花括号本质上意味着“无论底层参数是什么,用这些参数在原地构造它”。带点的名字是指定初始化器,因此这些字段会获得指定的值,而其他字段则使用它们的默认值。 就这样,C++中的关键字参数。你只需要稍微眯起眼睛,假装没看到那些额外的花括号。

相似文章

C++ 中的惰性初始化

Lobsters Hottest

本文解释 C++ 中的惰性初始化,通过将计算推迟到必要时来优化性能,使用辅助结构体来利用 std::optional 中的转换运算符。

参数之争

Lobsters Hottest

本文探讨了在编程语言中使用命名参数和灵活参数风格的权衡,比较了 Rust 的简洁性与 Ruby 的简练性,并对在 Rust 中采用类似功能表示怀疑。