Merge commit '147125babfc18abf586237344d6dab5a4bd1e79f' as 'libs/cli11'
This commit is contained in:
51
libs/cli11/examples/inter_argument_order.cpp
Normal file
51
libs/cli11/examples/inter_argument_order.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright (c) 2017-2022, University of Cincinnati, developed by Henry Schreiner
|
||||
// under NSF AWARD 1414736 and by the respective contributors.
|
||||
// All rights reserved.
|
||||
//
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#include <CLI/CLI.hpp>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
CLI::App app{"An app to practice mixing unlimited arguments, but still recover the original order."};
|
||||
|
||||
std::vector<int> foos;
|
||||
auto *foo = app.add_option("--foo,-f", foos, "Some unlimited argument");
|
||||
|
||||
std::vector<int> bars;
|
||||
auto *bar = app.add_option("--bar", bars, "Some unlimited argument");
|
||||
|
||||
app.add_flag("--z,--x", "Random other flags");
|
||||
|
||||
// Standard parsing lines (copy and paste in, or use CLI11_PARSE)
|
||||
try {
|
||||
app.parse(argc, argv);
|
||||
} catch(const CLI::ParseError &e) {
|
||||
return app.exit(e);
|
||||
}
|
||||
|
||||
// I prefer using the back and popping
|
||||
std::reverse(std::begin(foos), std::end(foos));
|
||||
std::reverse(std::begin(bars), std::end(bars));
|
||||
|
||||
std::vector<std::pair<std::string, int>> keyval;
|
||||
for(auto *option : app.parse_order()) {
|
||||
if(option == foo) {
|
||||
keyval.emplace_back("foo", foos.back());
|
||||
foos.pop_back();
|
||||
}
|
||||
if(option == bar) {
|
||||
keyval.emplace_back("bar", bars.back());
|
||||
bars.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
// Prove the vector is correct
|
||||
for(auto &pair : keyval) {
|
||||
std::cout << pair.first << " : " << pair.second << std::endl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user