3

我正在使用 wxWidgets 重写我们的应用程序。目标之一是替换我们对本地化字符串的旧方法。另一个可能的目标是将 Python 解释器嵌入到应用程序中——但只是在以后。无论如何,任何能够使用花括号进行类似 Python 的字符串格式化的 C/C++ 代码或库都会很好。

如果您不了解 Python,这里是其格式功能的文档。您可以在里面找到对Format Specification Mini-Language的参考,以及Format examples。文档中的一些摘录...(这>>>是交互式 Python 模式的提示,下面一行显示了调用的结果。Python 使用单引号或双引号作为字符串分隔符):

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'

我还想将 Python 格式与命名占位符(而不是数字索引)一起使用。在 Python 中,字符串的str.format_map( mapping )方法用于映射类型map<string, some_type>相似的地方。比如说,my_dictionary包含如下映射:

"name"    --> "Guido"
"country" --> "Netherlands"

有一个template像下面这样的字符串,我想得到result......

wxString template("{name} was born in {country}.");
wxString result(format_map(s, my_dictionary));

// the result should contain...
// "Guido was born in Netherlands."

你知道任何可用的 C 或 C++ 代码能够做到这一点,还是我必须自己编写?

感谢您的时间和经验,

彼得

4

1 回答 1

4

是的。fmt 库使用基于 Python 的str.format的格式字符串语法。str.format它支持包含命名参数的大多数格式化选项。这是一个例子:

std::string s = fmt::format("{0}{1}{0}", "abra", "cad");
// s == "abracadabra"

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

于 2013-01-21T20:16:20.603 回答