gpt4 book ai didi

c++ - C++中的命名参数字符串格式

转载 作者:IT老高 更新时间:2023-10-28 22:21:11 31 4
gpt4 key购买 nike

我想知道是否有像 Boost Format 这样的库,但它支持命名参数而不是位置参数。这是一个常见的习语,例如Python,你有一个上下文来格式化字符串,它可能使用也可能不使用所有可用的参数,例如

mouse_state = {}
mouse_state['button'] = 0
mouse_state['x'] = 50
mouse_state['y'] = 30

#...

"You clicked %(button)s at %(x)d,%(y)d." % mouse_state
"Targeting %(x)d, %(y)d." % mouse_state

是否有任何库提供最后两行的功能?我希望它能够提供类似以下的 API:

PrintFMap(string format, map<string, string> args);

在谷歌搜索中,我发现许多提供位置参数变体的库,但没有一个支持命名参数。理想情况下,该库几乎没有依赖项,因此我可以轻松地将其放入我的代码中。 C++ 在收集命名参数方面不会那么惯用,但可能有人比我想得更多。

性能很重要,特别是我希望减少内存分配(在 C++ 中总是很棘手),因为这可能在没有虚拟内存的设备上运行。但即使是从一个缓慢的开始,也可能比我自己从头开始编写要快。

最佳答案

fmt library支持命名参数:

print("You clicked {button} at {x},{y}.",
arg("button", "b1"), arg("x", 50), arg("y", 30));

作为语法糖,您甚至可以(ab)使用用户定义的文字来传递参数:

print("You clicked {button} at {x},{y}.",
"button"_a="b1", "x"_a=50, "y"_a=30);

为简洁起见,上述示例中省略了命名空间 fmt

免责声明:我是这个库的作者。

关于c++ - C++中的命名参数字符串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692116/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com