Ich verwende boost :: program_options, um Parameter aus einer Konfigurationsdatei zu erhalten.gibt es eine Möglichkeit, Config-Datei für Boost-Programmoptionen zu drucken
ich verstehe, dass ich eine Datei von Hand erstellen kann und Programmoptionen werden es analysieren. aber ich suche nach einer Möglichkeit für das Programm, die Datei automatisch zu generieren. das bedeutet, den Namen der Option und ihren Wert auszudrucken. zum Beispiel:
>./main
ohne Option würde init.cfg erzeugen, die i
[wave packet]
width = 1
position = 2.0
[calculation parameters]
levels = 15
dann in diese Datei gehen die Werte ändern Texteditor sieht wie folgt aus und verwenden diese Datei:
>./main init.cfg
eine gute Möglichkeit, dies zu erreichen, wäre Variablen_map operator<<
zu haben. Auf diese Weise kann ich es einfach in die Datei schreiben. Ändern Sie die Werte. lies die Datei. alle im selben Format und müssen nicht jede Zeile schreiben.
Ich konnte nichts dergleichen in der Dokumentation oder Beispielen finden. Bitte lass es mich wissen, wenn dies möglich ist
EDIT: Sam Miller zeigte, wie die Ini-Datei in Abschnitten zu analysieren. Ich habe jedoch immer noch ein Problem, die Werte von boost :: program_options :: variables_map vm zu bekommen. Ich habe versucht, die folgende
for(po::variables_map::iterator it = vm.begin(); it != vm.end(); ++it)
{
if(it->first!="help"&&it->first!="config")
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
}
statt it->second.value()
, bekam einen Fehler. Ich versuchte auch it->second
. Ich habe auch einen Fehler:
icpc -lboost_serialization -lboost_program_options -c programOptions.cc
programOptions.cc(60): error: no operator "<<" matches these operands
operand types are: std::basic_ostream<char, std::char_traits<char>> << boost::any
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
^
compilation aborted for programOptions.cc (code 2)
make: *** [programOptions.o] Error 2
bekomme ich den Wert korrekt, wenn ich it->second.as<int>()
verwenden, aber nicht alle meine Werte sind ints und sobald ich doppelt erreichen, stürzt das Programm mit diesem:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using boost::any_cast
Gibt es eine Möglichkeit, ein kurzes Beispiel zu schreiben? oder geben Sie eine Straßenkarte, wie es geht? –
@kirill_igum Ich habe ein Beispiel hinzugefügt. –