良い一日、
boost::program_options を介して構成ファイルを解析するクラスを作成しました。これが私が持っているものです(短縮):
namespace nsProOp = boost::program_options;
nsProOp::variables_map m_variableMap;
nsProOp::options_description m_description;
// To add options to the variableMap, e.g. "addOption<int>("money_amount");"
template <class T>
void addOption(const std::string& option, const std::string& helpDescription = "") {
m_description.add_options()(option.c_str(), nsProOp::value<T > (), helpDescription.c_str());
}
// And this is how i actually read the file:
void ConfigFile::parse() {
std::ifstream file;
file.open(m_pathToFile.c_str());
nsProOp::store(nsProOp::parse_config_file(file, m_description, true), m_variableMap);
nsProOp::notify(m_variableMap);
}
わかりました、これはうまくいきます。しかし、ユーザーから提供された最新のエントリを常に使用できるように、同じファイルを再度解析できるようにしたいと考えています。ブーストのドキュメントには、「ストア」について次のように記載されています。
「'options' で定義されているすべてのオプションを 'm' に格納します。'm' に既定値以外のオプションの値が既にある場合、'options' で何らかの値が指定されていても、その値は変更されません。」
したがって、「parse()」を再度呼び出しても、m_variableMap がいっぱいになるため、何も起こりません。m_variableMap.clear() を呼び出そうとしても問題は解決しないため、store は初めてしか機能しません。
誰か私にアドバイスはありますか?私の質問が不明な場合は、教えてください。ありがとう!