STLSoft の 1.10 アルファには platformstl::properties_file
が含まれています クラス。ファイルからの読み取りに使用できます:
using platformstl::properties_file;
properties_file properties("stuff.properties");
properties_file::value_type value = properties["name"];
または記憶から:
properties_file properties(
"name0=value1\n name1 value1 \n name\\ 2 : value\\ 2 ",
properties_file::contents);
properties_file::value_type value0 = properties["name0"];
properties_file::value_type value1 = properties["name1"];
properties_file::value_type value2 = properties["name 2"];
最新の 1.10 リリースには一連の包括的な単体テストが含まれており、Java ドキュメントに記載されているすべてのルールと例を処理するようにクラスをアップグレードしたようです。
唯一の明らかな問題は、value_type
stlsoft::basic_string_view
のインスタンスです (この Dobb 博士の記事で説明されています)、これは std::string
にいくらか似ています。 、しかし実際にはそのメモリを所有していません。おそらくパフォーマンス上の理由から、不必要な割り当てを避けるためにこれを行っていると思われます。しかし、それはあなたがただ書くことができないことを意味します
std::string value0 = properties["name0"];
ただし、これを行うことはできます:
std::string value0 = properties["name0"].c_str();
そしてこれ:
std::cout << properties["name0"];
ファイルまたはメモリからプロパティを読み取るには、絶対的な最後のサイクルが必要になる可能性が高いため、この設計上の決定に同意するかどうかはわかりません。 std::string
を使用するように変更する必要があると思います デフォルトでは、明示的に必要な場合は「文字列ビュー」を使用します。
それ以外は properties_file
libconfuse (C ライブラリ) も便利です。それは永遠に存在しており、柔軟性があります。
- ( www.nongnu.org/confuse/ ) http://www.nongnu.org/confuse/tutorial-html/index.html
これは、java.util.Properties をはるかに超えています。ただし、必ずしも Java プロパティ ファイル形式のコーナー ケースを処理するとは限りません (これは要件のようです)。
例を参照してください:
- シンプル:www.nongnu.org/confuse/simple.conf
- クレイジー:www.nongnu.org/confuse/test.conf
ただし、私が認識している C++ ラッパー ライブラリはありません。
Poco には PropertyFiles を読み取るための実装もありますhttp://pocoproject.org/docs/Poco.Util.PropertyFileConfiguration.html
ここからコピーした簡単な例:http://pocoproject.org/slides/180-Configuration.pdf
プロパティ ファイルの内容:
# a comment
! another comment
key1 = value1
key2: 123
key3.longValue = this is a very \
long value
path = c:\\test.dat
コード例
#include <Poco/Util/PropertyFileConfiguration.h>
using Poco::AutoPtr;
using Poco::Util::PropertyFileConfiguration;
AutoPtr<PropertyFileConfiguration> pConf;
pConf = new PropertyFileConfiguration("test.properties");
std::string key1 = pConf->getString("key1");
int value = pConf->getInt("key2");
std::string longVal = pConf->getString("key3.longValue");