diff --git a/application_base.cpp b/application_base.cpp index da02b36..b8b4ecc 100644 --- a/application_base.cpp +++ b/application_base.cpp @@ -69,6 +69,7 @@ class application_impl { options_description _app_options; options_description _cfg_options; variables_map _options; + std::vector> _parsed_options; std::filesystem::path _data_dir{"data-dir"}; std::filesystem::path _config_dir{"config-dir"}; @@ -259,6 +260,7 @@ bool application_base::initialize_impl(int argc, char** argv, vector_options; try { bpo::parsed_options parsed = bpo::command_line_parser(argc, argv).options(my->_app_options).run(); + my->_parsed_options = parsed.options; bpo::store(parsed, options); vector positionals = bpo::collect_unrecognized(parsed.options, bpo::include_positional); if(!positionals.empty()) @@ -335,6 +337,8 @@ bool application_base::initialize_impl(int argc, char** argv, vector > opts_from_config; try { bpo::parsed_options parsed_opts_from_config = bpo::parse_config_file(my->_config_file_name.make_preferred().string().c_str(), my->_cfg_options, false); + my->_parsed_options.reserve(my->_parsed_options.size() + parsed_opts_from_config.options.size()); + my->_parsed_options.insert(my->_parsed_options.end(), parsed_opts_from_config.options.begin(), parsed_opts_from_config.options.end()); bpo::store(parsed_opts_from_config, options); opts_from_config = parsed_opts_from_config.options; } catch( const boost::program_options::unknown_option& e ) { @@ -589,7 +593,11 @@ void application_base::set_sighup_callback(std::function callback) { } const bpo::variables_map& application_base::get_options() const{ - return my->_options; + return my->_options; +} + +const std::vector>& application_base::get_parsed_options() const { + return my->_parsed_options; } } /// namespace appbase diff --git a/include/appbase/application_base.hpp b/include/appbase/application_base.hpp index 028e359..85806ac 100644 --- a/include/appbase/application_base.hpp +++ b/include/appbase/application_base.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -254,6 +255,7 @@ class application_base { } const bpo::variables_map& get_options() const; + const std::vector>& get_parsed_options() const; /** * Set the current thread schedule priority to maximum.