ArgParser β Π»ΡΠ³ΠΊΠΎΠ²Π΅ΡΠ½Π°Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½Π°Ρ C++ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: ΡΡΡΠΎΠΊ, ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» ΠΈ Π±ΡΠ»Π΅Π²ΡΡ
ΡΠ»Π°Π³ΠΎΠ².
ΠΠ΄Π΅Π°Π»ΡΠ½Π° Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
CLI-ΡΡΠΈΠ»ΠΈΡ ΠΈ pet-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎΠΌΡ API ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅.
- ΠΠ°ΡΡΠΈΠ½Π³ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΎΠ²
--param=value,-p=value, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±Π΅Π· ΡΠ»Π°Π³ΠΎΠ². - ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΡΠΎΠΊ, ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», Π±ΡΠ»Π΅Π²ΡΡ ΡΠ»Π°Π³ΠΎΠ².
- ΠΠΎΠ³Π°ΡΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ API ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
AddStringArgument(...)β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.AddIntArgument(...)β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.AddFlag(...)β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π°Π³.AddHelp(...)β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ..Default(value)β ΡΠΊΠ°Π·Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ..MultiValue([min_Ρount])β ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ)..StoreValue(variable)/.StoreValues(container)β ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ..Positional()β ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ..Help()ΠΈ.HelpDescription()β Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΡΠ°Π²ΠΊΡ/ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
- ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠΊΡΡΡΠΎ ΡΠ΅ΡΡΠ°ΠΌΠΈ Google Test (
tests/argparser_test.cpp), ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°.
ArgParser parser("MyApp");
// Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ
parser.AddStringArgument("input")
.StoreValue(inputPath);
// ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Ρ Π΄Π΅ΡΠΎΠ»ΡΠΎΠΌ
parser.AddIntArgument("threads")
.Default(4)
.StoreValue(numThreads);
// ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ (ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 1 ΡΠ°Π·)
std::vector<int> ids;
parser.AddIntArgument("ids")
.MultiValue(1)
.Positional()
.StoreValues(ids);
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° `--help` Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
parser.AddHelp('h', "help", "Show help message");
if (!parser.Parse(args)) {
std::cerr << parser.HelpDescription();
return 1;
}
if (parser.Help()) {
std::cout << parser.HelpDescription();
return 0;
}