Гетерогенный контейнер
Если вы хотите иметь контейнер, который может хранить фиксированный набор типов, вы можете использовать один из boost::variant
:
typedef boost::variant<std::string, int> optval;
typedef std::vector<optval> options;
Теперь вы можете вставить push_back в вектор либо в виде строки, либо в целые числа, и вариант заметит, что он содержит:
options opts;
opts.push_back(10);
opts.push_back("hello");
Вы можете прочитать об этом в документации по Вариант повышения , в том числе о том, как получить правильное значение из варианта. Конечно, у вас также может быть карта от имен аргументов до таких вариантов, если вы уже настроили синтаксический анализ командной строки и вам больше не нужны библиотеки для этого:
std::map<std::string, optval> map;
map["--max-foo"] = 10;
map["--title"] = "something fun";
Разбор командной строки
Если вы хотите проанализировать аргументы командной строки вашей программы, вы можете обратиться к библиотеке Boost.Program Options , которая поможет вам в этом.
В основном, однако, я использую функцию posix getopt
, которая также может анализировать командную строку. Я рекомендую сначала изучить параметры программы повышения, и если вы чувствуете, что он слишком тяжелый, вы можете посмотреть в getopt (см. man 3 getopt
)