{"id":16199877,"url":"https://github.com/bialger/argparser","last_synced_at":"2026-02-03T09:02:37.741Z","repository":{"id":247076165,"uuid":"824957720","full_name":"bialger/ArgParser","owner":"bialger","description":"C++/CMake library for POSIX-compatible argument parsing. ITMO SE'27 first year programming laboratory work.","archived":false,"fork":false,"pushed_at":"2024-08-28T16:34:16.000Z","size":227,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-12T20:44:16.449Z","etag":null,"topics":["argument-parser","cli-argument-parser","cpp-argparse","cpp-library","posix-compliant","student-project"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bialger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-06T11:53:54.000Z","updated_at":"2024-11-27T07:11:20.000Z","dependencies_parsed_at":"2024-07-06T13:24:08.792Z","dependency_job_id":"bd0615cc-3ab6-40dc-b89b-2becd0643de8","html_url":"https://github.com/bialger/ArgParser","commit_stats":null,"previous_names":["bialger/argparser"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/bialger/ArgParser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FArgParser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FArgParser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FArgParser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FArgParser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bialger","download_url":"https://codeload.github.com/bialger/ArgParser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FArgParser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29039341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T08:41:49.363Z","status":"ssl_error","status_checked_at":"2026-02-03T08:40:19.255Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argument-parser","cli-argument-parser","cpp-argparse","cpp-library","posix-compliant","student-project"],"created_at":"2024-10-10T09:28:33.559Z","updated_at":"2026-02-03T09:02:37.697Z","avatar_url":"https://github.com/bialger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Библиотека ArgParser\n\nДанная библиотека определяет POSIX-совместимый парсер аргументов командной строки - библиотеку `argparser`.\nИспользует CMake.\nОна была написана как лабораторная работа в курсе \"Основы программирования на C++\" в программе ITMO SE.\nС заданием можно ознакомиться [здесь](./TASK.md).\n\nВ библиотеке определен парсинг стандартных примитивов, таких как `int`, `float`, `char` и т.д., а также\nпарсинг `std::string`.\nЕсть возможность добавлять логику парсинга для иных типов документов (см. [пример](./bin/main.cpp)).\n\nДокументация библиотеки находится [во вложенной папке](./lib/argparser/docs/README.md).\n\n## Использование в проекте\n\nБолее подробно об использовании ArgParser можно прочитать на странице\n[пользовательской документации](./lib/argparser/docs/ArgParser.md).\n\n### CMake\n\nДанную библиотеку можно получить через FetchContent:\n\n```cmake\nFetchContent_Declare(argparser GIT_REPOSITORY https://github.com/bialger/ArgParser)\nFetchContent_MakeAvailable(argparser)\n\ntarget_link_libraries(MyTarget PUBLIC argparser)\n```\n\nМожно использовать конкретную ветку, тег версии или коммит:\n\n```cmake\nFetchContent_Declare(argparser GIT_REPOSITORY https://github.com/bialger/ArgParser GIT_TAG dev)\n```\n\n```cmake\nFetchContent_Declare(argparser GIT_REPOSITORY https://github.com/bialger/ArgParser GIT_TAG v1.1.0)\n```\n\n## Пример использования и добавления аргумента\n\nДля добавления пользовательского типа аргумента `Type`, он должен удовлетворять следующим требованиям:\n\n* Иметь конструктор без параметров и конструктор копирования\n* Иметь оператор присваивания с копированием\n* Должен быть определен оператор `std::ostream\u0026 operator\u003c\u003c(std::ostream\u0026 os, const Type\u0026 t)`\n* Должна быть определена функция получения значения из `std::string`: \n  `ArgumentParser::NonMemberParsingResult\u003cType\u003e ParseType(const std::string\u0026)`\n\nТогда для добавления аргумента можно использовать макрос: \n`AddArgumentType(Type, ParseType)`.\n\nПри вызове конструктора класса `ArgParser` должен быть передан аргумент типа \n`ArgumentTypes\u003cArgs...\u003e`, где `Args...` - типы добавленных аргументов.\nЭто можно сделать удобно при помощи макроса `PassArgumentTypes(Args...)`.\nВ вышеприведенном примере следует передать `PassArgumentTypes(Type)`.\n\nCMakeLists.txt:\n\n```cmake\ncmake_minimum_required(VERSION 3.28)\nproject(TestArgParser)\n\nset(CMAKE_CXX_STANDARD 20)\n\ninclude(FetchContent)\nFetchContent_Declare(argparser GIT_REPOSITORY https://github.com/bialger/ArgParser)\nFetchContent_MakeAvailable(argparser)\n\nadd_executable(TestArgParser main.cpp)\n\ntarget_link_libraries(TestArgParser PRIVATE argparser)\n```\n\nmain.cpp:\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cargparser/ArgParser.hpp\u003e\n\nenum class Action {\n  kNone = 0,\n  kSum = 1,\n  kMul = 2,\n};\n\nstd::ostream\u0026 operator\u003c\u003c(std::ostream\u0026 os, Action action) {\n  switch (action) {\n    case Action::kSum:\n      os \u003c\u003c \"sum\";\n      break;\n    case Action::kMul:\n      os \u003c\u003c \"mul\";\n      break;\n    case Action::kNone:\n      os \u003c\u003c \"none\";\n      break;\n  }\n\n  return os;\n}\n\nArgumentParser::NonMemberParsingResult\u003cAction\u003e ParseAction(const std::string\u0026 action) {\n  ArgumentParser::NonMemberParsingResult\u003cAction\u003e result{};\n\n  if (action == \"sum\") {\n    result.value = Action::kSum;\n  } else if (action == \"mul\") {\n    result.value = Action::kMul;\n  } else {\n    result.success = false;\n    result.value = Action::kNone;\n  }\n\n  return result;\n}\n\nAddArgumentType(Action, ParseAction)\n\nvoid InitializeParser(ArgumentParser::ArgParser\u0026 parser) {\n  std::string action_alias = \"Action\";\n  std::string action_description = \"Action type\";\n  parser.SetAliasForType\u003cAction\u003e(action_alias);\n  parser.AddArgument\u003cAction\u003e('a', \"action\", action_description);\n  parser.AddHelp('h', \"help\", \"Program accumulate arguments\");\n}\n\nint main(int argc, char *argv[]) {\n  ArgumentParser::ArgParser parser(\"TestArgParser\", PassArgumentTypes(Action));\n  InitializeParser(parser);\n  bool result = parser.Parse(argc, argv, {std::cerr, true});\n\n  if (!result) {\n    std::cout \u003c\u003c parser.HelpDescription() \u003c\u003c std::endl;\n    return 1;\n  }\n\n  if (parser.Help()) {\n    std::cout \u003c\u003c parser.HelpDescription() \u003c\u003c std::endl;\n    return 0;\n  }\n  \n  if (parser.GetValue\u003cAction\u003e() == Action::kSum) {\n    std::cout \u003c\u003c \"Summarize\" \u003c\u003c std::endl;\n  } else if (parser.GetValue\u003cAction\u003e() == Action::kMul) {\n    std::cout \u003c\u003c \"Multiply\" \u003c\u003c std::endl;\n  }\n\n  std::cout \u003c\u003c std::boolalpha \u003c\u003c parser.GetFlag(\"test\") \u003c\u003c std::endl;\n  return 0;\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fargparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbialger%2Fargparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fargparser/lists"}