阅读代码时,我们会找到一些这样的函数.
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++如何做到这一点?
C++本身不支持这种功能,因此您不能只使用任何旧的现有功能.如果你正在创建自己的API,你可以使用所谓的命名参数成语来模拟它.链接中的示例:
File f = OpenFile("foo.txt")
.readonly()
.createIfNotExist()
.appendWhenWriting()
.blockSize(1024)
.unbuffered()
.exclusiveAccess();
Run Code Online (Sandbox Code Playgroud)
这在C或C++中是不可能的.
我理解你的痛苦.我个人认为,有一个函数需要超过9000个参数,这是一个糟糕设计的标志,特别是如果它们中的大多数是NULL或占位符值.例如,许多POSIX标准化函数采用某种方式将struct所有必要值累积成一个易于理解的参数.