3

wxWidgets を使用してアプリケーションを書き直しています。目標の 1 つは、ローカライズされた文字列に対する古いアプローチを置き換えることです。もう 1 つの考えられる目標は、Python インタープリターをアプリケーションに埋め込むことですが、それは後で行います。とにかく、中かっこを使用する Python のような文字列の書式設定が可能な C/C++ コードまたはライブラリがあれば便利です。

Python を知らない場合は、ここにそのformat関数のドキュメントがあります。内部の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 に答える