28 bpo::options_description& options,
29 const std::vector<ConfigParamSpec>& specs,
30 bpo::options_description vetos)
32 auto proxy = options.add_options();
33 for (
auto const& spec : specs) {
35 if (vetos.find_nothrow(spec.name,
false) !=
nullptr) {
43 addConfigSpecOption<VariantType::Int>(spec, options);
46 addConfigSpecOption<VariantType::Int8>(spec, options);
49 addConfigSpecOption<VariantType::Int16>(spec, options);
52 addConfigSpecOption<VariantType::Int64>(spec, options);
55 addConfigSpecOption<VariantType::UInt8>(spec, options);
58 addConfigSpecOption<VariantType::UInt16>(spec, options);
61 addConfigSpecOption<VariantType::UInt32>(spec, options);
64 addConfigSpecOption<VariantType::UInt64>(spec, options);
67 addConfigSpecOption<VariantType::Float>(spec, options);
70 addConfigSpecOption<VariantType::Double>(spec, options);
73 addConfigSpecOption<VariantType::String>(spec, options);
76 addConfigSpecOption<VariantType::Bool>(spec, options);
79 addConfigSpecOption<VariantType::ArrayInt>(spec, options);
82 addConfigSpecOption<VariantType::ArrayFloat>(spec, options);
85 addConfigSpecOption<VariantType::ArrayDouble>(spec, options);
88 addConfigSpecOption<VariantType::ArrayBool>(spec, options);
91 addConfigSpecOption<VariantType::ArrayString>(spec, options);
94 addConfigSpecOption<VariantType::Array2DInt>(spec, options);
97 addConfigSpecOption<VariantType::Array2DFloat>(spec, options);
100 addConfigSpecOption<VariantType::Array2DDouble>(spec, options);
103 addConfigSpecOption<VariantType::LabeledArrayInt>(spec, options);
106 addConfigSpecOption<VariantType::LabeledArrayFloat>(spec, options);
109 addConfigSpecOption<VariantType::LabeledArrayDouble>(spec, options);
112 addConfigSpecOption<VariantType::LabeledArrayString>(spec, options);
160 boost::program_options::options_description& options,
161 boost::program_options::options_description
const& vetos)
163 bool haveOption =
false;
164 for (
const auto& configSpec : spec) {
167 if (vetos.find_nothrow(configSpec.name,
false) !=
nullptr) {
170 }
catch (boost::program_options::ambiguous_option& e) {
171 for (
auto const& alternative : e.alternatives()) {
172 std::cerr << alternative << std::endl;
178 std::stringstream defaultValue;
179 defaultValue << configSpec.defaultValue;
182 options.add_options()(configSpec.name.c_str(),
183 bpo::value<std::string>()->default_value(defaultValue.str(),
defaultValueForHelp(defaultValue.str())),
184 configSpec.help.c_str());
186 options.add_options()(configSpec.name.c_str(),
187 bpo::value<std::string>(),
188 configSpec.help.c_str());
192 options.add_options()(configSpec.name.c_str(),
193 bpo::value<bool>()->zero_tokens()->default_value(configSpec.defaultValue.get<
bool>()),
194 configSpec.help.c_str());
196 options.add_options()(configSpec.name.c_str(),
197 bpo::value<bool>()->zero_tokens(),
198 configSpec.help.c_str());