如何在C++中调用带有"parameter = value"的函数?

Han*_*ank 12 c c++ function

阅读代码时,我们会找到一些这样的函数.

g_spawn_async(NULL, new_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

我想没有人能弄清楚每个参数的含义是什么.为了理解代码,我们必须找到函数的声明.

gboolean    g_spawn_async               (const gchar *working_directory,
                                         gchar **argv,
                                         gchar **envp,
                                         GSpawnFlags flags,
                                         GSpawnChildSetupFunc child_setup,
                                         gpointer user_data,
                                         GPid *child_pid,
                                         GError **error);
Run Code Online (Sandbox Code Playgroud)

我们如何在C++中调用类似以下格式的函数?

g_spawn_async(working_directory=NULL,
              argv=new_argv,
              envp=NULL,
              flags=G_SPAWN_SEARCH_PATH,
              child_setup=NULL,
              user_data=NULL,
              child_pid=NULL,
              error=NULL);
Run Code Online (Sandbox Code Playgroud)

我认为这个将更具可读性,我可以理解代码而无需查找函数的声明.

我知道Python可以做到这一点.C++如何做到这一点?

Mar*_*som 8

C++本身不支持这种功能,因此您不能只使用任何旧的现有功能.如果你正在创建自己的API,你可以使用所谓的命名参数成语来模拟它.链接中的示例:

File f = OpenFile("foo.txt")
           .readonly()
           .createIfNotExist()
           .appendWhenWriting()
           .blockSize(1024)
           .unbuffered()
           .exclusiveAccess();
Run Code Online (Sandbox Code Playgroud)

  • @Yuanhang:不,它不会导致更多的公共方法.再看一下,这些方法在`OpenFile`对象上,他正在创建一个`File`对象.除了新的转换构造函数之外,`File`对象没有其他公共方法. (2认同)

arn*_*rne 5

这在C或C++中是不可能的.

我理解你的痛苦.我个人认为,有一个函数需要超过9000个参数,这是一个糟糕设计的标志,特别是如果它们中的大多数是NULL或占位符值.例如,许多POSIX标准化函数采用某种方式将struct所有必要值累积成一个易于理解的参数.