7#ifndef ARGS__API_HPP__INCLUDED
8#define ARGS__API_HPP__INCLUDED
28template<
typename PARENT,
typename SELF,
typename ARGPTR,
bool RETPARENT>
38template<
typename PARENT,
typename ARGPTR>
54 template<
typename NAME>
66 bool required =
false)
68 auto group = std::unique_ptr<OnlyOneGroup, details::Deleter<ArgIface>>(
74 ARGPTR a = std::move(group);
76 m_self.addArg(std::move(a));
82 template<
typename NAME>
94 bool required =
false)
97 std::unique_ptr<AllOfGroup, details::Deleter<ArgIface>>(
new AllOfGroup(std::forward<NAME>(name), required),
102 ARGPTR a = std::move(group);
104 m_self.addArg(std::move(a));
110 template<
typename NAME>
122 bool required =
false)
124 auto group = std::unique_ptr<AtLeastOneGroup, details::Deleter<ArgIface>>(
130 ARGPTR a = std::move(group);
132 m_self.addArg(std::move(a));
138 template<
typename NAME>
149 bool isWithValue =
false,
151 bool isRequired =
false,
161 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
162 new Arg(flag, std::forward<NAME>(name), isWithValue, isRequired),
166 arg->setDescription(desc);
169 if (!longDesc.empty()) {
170 arg->setLongDescription(longDesc);
173 if (!defaultValue.empty()) {
174 arg->setDefaultValue(defaultValue);
177 if (!valueSpecifier.empty()) {
178 arg->setValueSpecifier(valueSpecifier);
181 ARGPTR a = std::move(arg);
183 m_self.addArg(std::move(a));
197 bool isWithValue =
false,
199 bool isRequired =
false,
209 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(flag, isWithValue, isRequired),
213 arg->setDescription(desc);
216 if (!longDesc.empty()) {
217 arg->setLongDescription(longDesc);
220 if (!defaultValue.empty()) {
221 arg->setDefaultValue(defaultValue);
224 if (!valueSpecifier.empty()) {
225 arg->setValueSpecifier(valueSpecifier);
228 ARGPTR a = std::move(arg);
230 m_self.addArg(std::move(a));
236 template<
typename NAME>
245 bool isWithValue =
false,
247 bool isRequired =
false,
258 std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(std::forward<NAME>(name), isWithValue, isRequired),
262 arg->setDescription(desc);
265 if (!longDesc.empty()) {
266 arg->setLongDescription(longDesc);
269 if (!defaultValue.empty()) {
270 arg->setDefaultValue(defaultValue);
273 if (!valueSpecifier.empty()) {
274 arg->setValueSpecifier(valueSpecifier);
277 ARGPTR a = std::move(arg);
279 m_self.addArg(std::move(a));
285 template<
typename NAME>
296 bool isWithValue =
false,
298 bool isRequired =
false,
308 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
309 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
313 arg->setDescription(desc);
316 if (!longDesc.empty()) {
317 arg->setLongDescription(longDesc);
320 if (!defaultValue.empty()) {
321 arg->setDefaultValue(defaultValue);
324 if (!valueSpecifier.empty()) {
325 arg->setValueSpecifier(valueSpecifier);
328 ARGPTR a = std::move(arg);
330 m_self.addArg(std::move(a));
344 bool isWithValue =
false,
346 bool isRequired =
false,
356 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
360 arg->setDescription(desc);
363 if (!longDesc.empty()) {
364 arg->setLongDescription(longDesc);
367 if (!defaultValue.empty()) {
368 arg->setDefaultValue(defaultValue);
371 if (!valueSpecifier.empty()) {
372 arg->setValueSpecifier(valueSpecifier);
375 ARGPTR a = std::move(arg);
377 m_self.addArg(std::move(a));
383 template<
typename NAME>
392 bool isWithValue =
false,
394 bool isRequired =
false,
404 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
405 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
409 arg->setDescription(desc);
412 if (!longDesc.empty()) {
413 arg->setLongDescription(longDesc);
416 if (!defaultValue.empty()) {
417 arg->setDefaultValue(defaultValue);
420 if (!valueSpecifier.empty()) {
421 arg->setValueSpecifier(valueSpecifier);
424 ARGPTR a = std::move(arg);
426 m_self.addArg(std::move(a));
432 template<
typename NAME>
443 bool isWithValue =
false,
445 bool isRequired =
false,
455 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
456 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
460 arg->setDescription(desc);
463 if (!longDesc.empty()) {
464 arg->setLongDescription(longDesc);
467 if (!defaultValues.empty()) {
468 arg->setDefaultValues(defaultValues);
471 if (!valueSpecifier.empty()) {
472 arg->setValueSpecifier(valueSpecifier);
475 ARGPTR a = std::move(arg);
477 m_self.addArg(std::move(a));
491 bool isWithValue =
false,
493 bool isRequired =
false,
503 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
507 arg->setDescription(desc);
510 if (!longDesc.empty()) {
511 arg->setLongDescription(longDesc);
514 if (!defaultValues.empty()) {
515 arg->setDefaultValues(defaultValues);
518 if (!valueSpecifier.empty()) {
519 arg->setValueSpecifier(valueSpecifier);
522 ARGPTR a = std::move(arg);
524 m_self.addArg(std::move(a));
530 template<
typename NAME>
539 bool isWithValue =
false,
541 bool isRequired =
false,
551 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
552 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
556 arg->setDescription(desc);
559 if (!longDesc.empty()) {
560 arg->setLongDescription(longDesc);
563 if (!defaultValues.empty()) {
564 arg->setDefaultValues(defaultValues);
567 if (!valueSpecifier.empty()) {
568 arg->setValueSpecifier(valueSpecifier);
571 ARGPTR a = std::move(arg);
573 m_self.addArg(std::move(a));
609 m_self.
addArg(std::move(arg));
615 template<
typename NAME>
629 bool isSubCommandRequired =
false,
639 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
640 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
644 cmd->setDescription(desc);
647 if (!longDesc.empty()) {
648 cmd->setLongDescription(longDesc);
651 if (!defaultValue.empty()) {
652 cmd->setDefaultValue(defaultValue);
655 if (!valueSpecifier.empty()) {
656 cmd->setValueSpecifier(valueSpecifier);
661 ARGPTR arg = std::move(cmd);
663 m_self.addArg(std::move(arg));
669 template<
typename NAME>
683 bool isSubCommandRequired =
false,
693 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
694 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
698 cmd->setDescription(desc);
701 if (!longDesc.empty()) {
702 cmd->setLongDescription(longDesc);
705 if (!defaultValues.empty()) {
706 cmd->setDefaultValues(defaultValues);
709 if (!valueSpecifier.empty()) {
710 cmd->setValueSpecifier(valueSpecifier);
715 ARGPTR arg = std::move(cmd);
717 m_self.addArg(std::move(arg));
740template<
typename PARENT,
typename SELF,
typename ARGPTR>
741class API<PARENT, SELF, ARGPTR, false>
756 template<
typename NAME>
768 bool required =
false)
770 auto group = std::unique_ptr<OnlyOneGroup, details::Deleter<ArgIface>>(
776 ARGPTR a = std::move(group);
778 m_self.addArg(std::move(a));
784 template<
typename NAME>
796 bool required =
false)
799 std::unique_ptr<AllOfGroup, details::Deleter<ArgIface>>(
new AllOfGroup(std::forward<NAME>(name), required),
804 ARGPTR a = std::move(group);
806 m_self.addArg(std::move(a));
812 template<
typename NAME>
824 bool required =
false)
826 auto group = std::unique_ptr<AtLeastOneGroup, details::Deleter<ArgIface>>(
832 ARGPTR a = std::move(group);
834 m_self.addArg(std::move(a));
840 template<
typename NAME>
851 bool isWithValue =
false,
853 bool isRequired =
false,
863 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
864 new Arg(flag, std::forward<NAME>(name), isWithValue, isRequired),
868 arg->setDescription(desc);
871 if (!longDesc.empty()) {
872 arg->setLongDescription(longDesc);
875 if (!defaultValue.empty()) {
876 arg->setDefaultValue(defaultValue);
879 if (!valueSpecifier.empty()) {
880 arg->setValueSpecifier(valueSpecifier);
883 ARGPTR a = std::move(arg);
885 m_self.addArg(std::move(a));
899 bool isWithValue =
false,
901 bool isRequired =
false,
911 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(flag, isWithValue, isRequired),
915 arg->setDescription(desc);
918 if (!longDesc.empty()) {
919 arg->setLongDescription(longDesc);
922 if (!defaultValue.empty()) {
923 arg->setDefaultValue(defaultValue);
926 if (!valueSpecifier.empty()) {
927 arg->setValueSpecifier(valueSpecifier);
930 ARGPTR a = std::move(arg);
932 m_self.addArg(std::move(a));
938 template<
typename NAME>
947 bool isWithValue =
false,
949 bool isRequired =
false,
960 std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(std::forward<NAME>(name), isWithValue, isRequired),
964 arg->setDescription(desc);
967 if (!longDesc.empty()) {
968 arg->setLongDescription(longDesc);
971 if (!defaultValue.empty()) {
972 arg->setDefaultValue(defaultValue);
975 if (!valueSpecifier.empty()) {
976 arg->setValueSpecifier(valueSpecifier);
979 ARGPTR a = std::move(arg);
981 m_self.addArg(std::move(a));
987 template<
typename NAME>
998 bool isWithValue =
false,
1000 bool isRequired =
false,
1010 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1011 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
1014 if (!desc.empty()) {
1015 arg->setDescription(desc);
1018 if (!longDesc.empty()) {
1019 arg->setLongDescription(longDesc);
1022 if (!defaultValue.empty()) {
1023 arg->setDefaultValue(defaultValue);
1026 if (!valueSpecifier.empty()) {
1027 arg->setValueSpecifier(valueSpecifier);
1030 ARGPTR a = std::move(arg);
1032 m_self.addArg(std::move(a));
1046 bool isWithValue =
false,
1048 bool isRequired =
false,
1058 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
1061 if (!desc.empty()) {
1062 arg->setDescription(desc);
1065 if (!longDesc.empty()) {
1066 arg->setLongDescription(longDesc);
1069 if (!defaultValue.empty()) {
1070 arg->setDefaultValue(defaultValue);
1073 if (!valueSpecifier.empty()) {
1074 arg->setValueSpecifier(valueSpecifier);
1077 ARGPTR a = std::move(arg);
1079 m_self.addArg(std::move(a));
1085 template<
typename NAME>
1094 bool isWithValue =
false,
1096 bool isRequired =
false,
1106 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1107 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
1110 if (!desc.empty()) {
1111 arg->setDescription(desc);
1114 if (!longDesc.empty()) {
1115 arg->setLongDescription(longDesc);
1118 if (!defaultValue.empty()) {
1119 arg->setDefaultValue(defaultValue);
1122 if (!valueSpecifier.empty()) {
1123 arg->setValueSpecifier(valueSpecifier);
1126 ARGPTR a = std::move(arg);
1128 m_self.addArg(std::move(a));
1134 template<
typename NAME>
1145 bool isWithValue =
false,
1147 bool isRequired =
false,
1157 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1158 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
1161 if (!desc.empty()) {
1162 arg->setDescription(desc);
1165 if (!longDesc.empty()) {
1166 arg->setLongDescription(longDesc);
1169 if (!defaultValues.empty()) {
1170 arg->setDefaultValues(defaultValues);
1173 if (!valueSpecifier.empty()) {
1174 arg->setValueSpecifier(valueSpecifier);
1177 ARGPTR a = std::move(arg);
1179 m_self.addArg(std::move(a));
1193 bool isWithValue =
false,
1195 bool isRequired =
false,
1205 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
1208 if (!desc.empty()) {
1209 arg->setDescription(desc);
1212 if (!longDesc.empty()) {
1213 arg->setLongDescription(longDesc);
1216 if (!defaultValues.empty()) {
1217 arg->setDefaultValues(defaultValues);
1220 if (!valueSpecifier.empty()) {
1221 arg->setValueSpecifier(valueSpecifier);
1224 ARGPTR a = std::move(arg);
1226 m_self.addArg(std::move(a));
1232 template<
typename NAME>
1241 bool isWithValue =
false,
1243 bool isRequired =
false,
1253 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1254 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
1257 if (!desc.empty()) {
1258 arg->setDescription(desc);
1261 if (!longDesc.empty()) {
1262 arg->setLongDescription(longDesc);
1265 if (!defaultValues.empty()) {
1266 arg->setDefaultValues(defaultValues);
1269 if (!valueSpecifier.empty()) {
1270 arg->setValueSpecifier(valueSpecifier);
1273 ARGPTR a = std::move(arg);
1275 m_self.addArg(std::move(a));
1311 m_self.
addArg(std::move(arg));
1317 template<
typename NAME>
1331 bool isSubCommandRequired =
false,
1341 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
1342 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
1345 if (!desc.empty()) {
1346 cmd->setDescription(desc);
1349 if (!longDesc.empty()) {
1350 cmd->setLongDescription(longDesc);
1353 if (!defaultValue.empty()) {
1354 cmd->setDefaultValue(defaultValue);
1357 if (!valueSpecifier.empty()) {
1358 cmd->setValueSpecifier(valueSpecifier);
1363 ARGPTR arg = std::move(cmd);
1365 m_self.addArg(std::move(arg));
1371 template<
typename NAME>
1385 bool isSubCommandRequired =
false,
1395 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
1396 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
1399 if (!desc.empty()) {
1400 cmd->setDescription(desc);
1403 if (!longDesc.empty()) {
1404 cmd->setLongDescription(longDesc);
1407 if (!defaultValues.empty()) {
1408 cmd->setDefaultValues(defaultValues);
1411 if (!valueSpecifier.empty()) {
1412 cmd->setValueSpecifier(valueSpecifier);
1417 ARGPTR arg = std::move(cmd);
1419 m_self.addArg(std::move(arg));
1442template<
typename PARENT,
typename SELF,
typename ARGPTR>
1443class API<PARENT, SELF, ARGPTR, true>
1458 template<
typename NAME>
1467 bool required =
false)
1469 auto group = std::unique_ptr<OnlyOneGroup, details::Deleter<ArgIface>>(
1475 ARGPTR a = std::move(group);
1477 m_self.addArg(std::move(a));
1483 template<
typename NAME>
1492 bool required =
false)
1495 std::unique_ptr<AllOfGroup, details::Deleter<ArgIface>>(
new AllOfGroup(std::forward<NAME>(name), required),
1500 ARGPTR a = std::move(group);
1502 m_self.addArg(std::move(a));
1508 template<
typename NAME>
1517 bool required =
false)
1519 auto group = std::unique_ptr<AtLeastOneGroup, details::Deleter<ArgIface>>(
1525 ARGPTR a = std::move(group);
1527 m_self.addArg(std::move(a));
1533 template<
typename NAME>
1540 bool isWithValue =
false,
1542 bool isRequired =
false,
1552 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
1553 new Arg(flag, std::forward<NAME>(name), isWithValue, isRequired),
1556 if (!desc.empty()) {
1557 arg->setDescription(desc);
1560 if (!longDesc.empty()) {
1561 arg->setLongDescription(longDesc);
1564 if (!defaultValue.empty()) {
1565 arg->setDefaultValue(defaultValue);
1568 if (!valueSpecifier.empty()) {
1569 arg->setValueSpecifier(valueSpecifier);
1572 ARGPTR a = std::move(arg);
1574 m_self.addArg(std::move(a));
1584 bool isWithValue =
false,
1586 bool isRequired =
false,
1596 auto arg = std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(flag, isWithValue, isRequired),
1599 if (!desc.empty()) {
1600 arg->setDescription(desc);
1603 if (!longDesc.empty()) {
1604 arg->setLongDescription(longDesc);
1607 if (!defaultValue.empty()) {
1608 arg->setDefaultValue(defaultValue);
1611 if (!valueSpecifier.empty()) {
1612 arg->setValueSpecifier(valueSpecifier);
1615 ARGPTR a = std::move(arg);
1617 m_self.addArg(std::move(a));
1623 template<
typename NAME>
1628 bool isWithValue =
false,
1630 bool isRequired =
false,
1641 std::unique_ptr<Arg, details::Deleter<ArgIface>>(
new Arg(std::forward<NAME>(name), isWithValue, isRequired),
1644 if (!desc.empty()) {
1645 arg->setDescription(desc);
1648 if (!longDesc.empty()) {
1649 arg->setLongDescription(longDesc);
1652 if (!defaultValue.empty()) {
1653 arg->setDefaultValue(defaultValue);
1656 if (!valueSpecifier.empty()) {
1657 arg->setValueSpecifier(valueSpecifier);
1660 ARGPTR a = std::move(arg);
1662 m_self.addArg(std::move(a));
1668 template<
typename NAME>
1675 bool isWithValue =
false,
1677 bool isRequired =
false,
1687 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1688 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
1691 if (!desc.empty()) {
1692 arg->setDescription(desc);
1695 if (!longDesc.empty()) {
1696 arg->setLongDescription(longDesc);
1699 if (!defaultValue.empty()) {
1700 arg->setDefaultValue(defaultValue);
1703 if (!valueSpecifier.empty()) {
1704 arg->setValueSpecifier(valueSpecifier);
1707 ARGPTR a = std::move(arg);
1709 m_self.addArg(std::move(a));
1719 bool isWithValue =
false,
1721 bool isRequired =
false,
1731 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
1734 if (!desc.empty()) {
1735 arg->setDescription(desc);
1738 if (!longDesc.empty()) {
1739 arg->setLongDescription(longDesc);
1742 if (!defaultValue.empty()) {
1743 arg->setDefaultValue(defaultValue);
1746 if (!valueSpecifier.empty()) {
1747 arg->setValueSpecifier(valueSpecifier);
1750 ARGPTR a = std::move(arg);
1752 m_self.addArg(std::move(a));
1758 template<
typename NAME>
1763 bool isWithValue =
false,
1765 bool isRequired =
false,
1775 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1776 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
1779 if (!desc.empty()) {
1780 arg->setDescription(desc);
1783 if (!longDesc.empty()) {
1784 arg->setLongDescription(longDesc);
1787 if (!defaultValue.empty()) {
1788 arg->setDefaultValue(defaultValue);
1791 if (!valueSpecifier.empty()) {
1792 arg->setValueSpecifier(valueSpecifier);
1795 ARGPTR a = std::move(arg);
1797 m_self.addArg(std::move(a));
1803 template<
typename NAME>
1810 bool isWithValue =
false,
1812 bool isRequired =
false,
1822 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1823 new MultiArg(flag, std::forward<NAME>(name), isWithValue, isRequired),
1826 if (!desc.empty()) {
1827 arg->setDescription(desc);
1830 if (!longDesc.empty()) {
1831 arg->setLongDescription(longDesc);
1834 if (!defaultValues.empty()) {
1835 arg->setDefaultValues(defaultValues);
1838 if (!valueSpecifier.empty()) {
1839 arg->setValueSpecifier(valueSpecifier);
1842 ARGPTR a = std::move(arg);
1844 m_self.addArg(std::move(a));
1854 bool isWithValue =
false,
1856 bool isRequired =
false,
1866 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
new MultiArg(flag, isWithValue, isRequired),
1869 if (!desc.empty()) {
1870 arg->setDescription(desc);
1873 if (!longDesc.empty()) {
1874 arg->setLongDescription(longDesc);
1877 if (!defaultValues.empty()) {
1878 arg->setDefaultValues(defaultValues);
1881 if (!valueSpecifier.empty()) {
1882 arg->setValueSpecifier(valueSpecifier);
1885 ARGPTR a = std::move(arg);
1887 m_self.addArg(std::move(a));
1893 template<
typename NAME>
1898 bool isWithValue =
false,
1900 bool isRequired =
false,
1910 auto arg = std::unique_ptr<MultiArg, details::Deleter<ArgIface>>(
1911 new MultiArg(std::forward<NAME>(name), isWithValue, isRequired),
1914 if (!desc.empty()) {
1915 arg->setDescription(desc);
1918 if (!longDesc.empty()) {
1919 arg->setLongDescription(longDesc);
1922 if (!defaultValues.empty()) {
1923 arg->setDefaultValues(defaultValues);
1926 if (!valueSpecifier.empty()) {
1927 arg->setValueSpecifier(valueSpecifier);
1930 ARGPTR a = std::move(arg);
1932 m_self.addArg(std::move(a));
1938 template<
typename NAME>
1949 bool isSubCommandRequired =
false,
1959 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
1960 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
1963 if (!desc.empty()) {
1964 cmd->setDescription(desc);
1967 if (!longDesc.empty()) {
1968 cmd->setLongDescription(longDesc);
1971 if (!defaultValue.empty()) {
1972 cmd->setDefaultValue(defaultValue);
1975 if (!valueSpecifier.empty()) {
1976 cmd->setValueSpecifier(valueSpecifier);
1981 ARGPTR arg = std::move(cmd);
1983 m_self.addArg(std::move(arg));
1989 template<
typename NAME>
2000 bool isSubCommandRequired =
false,
2010 auto cmd = std::unique_ptr<Command, details::Deleter<ArgIface>>(
2011 new Command(std::forward<NAME>(name), opt, isSubCommandRequired),
2014 if (!desc.empty()) {
2015 cmd->setDescription(desc);
2018 if (!longDesc.empty()) {
2019 cmd->setLongDescription(longDesc);
2022 if (!defaultValues.empty()) {
2023 cmd->setDefaultValues(defaultValues);
2026 if (!valueSpecifier.empty()) {
2027 cmd->setValueSpecifier(valueSpecifier);
2032 ARGPTR arg = std::move(cmd);
2034 m_self.addArg(std::move(arg));
Group of args where all arguments should be defined.
Group of args where at least one argument should be defined.
Command in the command line interface.
std::unique_ptr< ArgIface, details::Deleter< ArgIface > > ArgPtr
Smart pointer to the argument.
Group of args where only one argument can be defined.
API< PARENT, Command, ARGPTR, false > & addArg(ArgIface *arg)
Add argument.
API< API< PARENT, Command, ARGPTR, false >, AllOfGroup, ARGPTR, false > addAllOfGroup(NAME &&name, bool required=false)
Add AllOfGroup.
API< PARENT, Command, ARGPTR, false > & addMultiArgWithFlagOnlyAndDefaultValues(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with flag only.
PARENT & end() const
End this group.
API< PARENT, Command, ARGPTR, false > & addMultiArg(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument.
API< PARENT, Command, ARGPTR, false > & addArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with name only.
API< API< PARENT, Command, ARGPTR, false >, OnlyOneGroup, ARGPTR, false > addOnlyOneGroup(NAME &&name, bool required=false)
Add OnlyOneGroup.
API< PARENT, Command, ARGPTR, false > & addMultiArgWithNameOnlyAndDefaultValues(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with name only.
API(PARENT &parent, Command &self)
API< PARENT, Command, ARGPTR, false > & addMultiArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with flag only.
API< PARENT, Command, ARGPTR, false > & addArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with flag only.
API< PARENT, Command, ARGPTR, false > & addMultiArgWithDefaulValues(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument.
API< API< PARENT, Command, ARGPTR, false >, AtLeastOneGroup, ARGPTR, false > addAtLeastOneGroup(NAME &&name, bool required=false)
Add AtLeastOneGroup.
API< PARENT, Command, ARGPTR, false > & addMultiArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with name only.
API< PARENT, Command, ARGPTR, false > & addArg(GroupIface::ArgPtr arg)
Add argument.
API< API< PARENT, Command, ARGPTR, false >, Command, ARGPTR, false > addCommandWithDefaultValues(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add Command.
API< PARENT, Command, ARGPTR, false > & addArgWithFlagAndName(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument.
API< API< PARENT, Command, ARGPTR, false >, Command, ARGPTR, false > addCommand(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add Command.
API< PARENT, Command, ARGPTR, false > & addArg(ArgIface &arg)
Add argument.
API< PARENT, SELF, ARGPTR, false > & addArg(ArgIface &arg)
Add argument.
API< PARENT, SELF, ARGPTR, false > & addMultiArgWithNameOnlyAndDefaultValues(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with name only.
API< API< PARENT, SELF, ARGPTR, false >, Command, ARGPTR, false > addCommandWithDefaultValues(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add Command.
API< API< PARENT, SELF, ARGPTR, false >, Command, ARGPTR, false > addCommand(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add Command.
API< PARENT, SELF, ARGPTR, false > & addMultiArgWithDefaulValues(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument.
API< PARENT, SELF, ARGPTR, false > & addArg(ArgIface *arg)
Add argument.
API< API< PARENT, SELF, ARGPTR, false >, AtLeastOneGroup, ARGPTR, false > addAtLeastOneGroup(NAME &&name, bool required=false)
Add AtLeastOneGroup.
API< API< PARENT, SELF, ARGPTR, false >, OnlyOneGroup, ARGPTR, false > addOnlyOneGroup(NAME &&name, bool required=false)
Add OnlyOneGroup.
API< PARENT, SELF, ARGPTR, false > & addMultiArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with flag only.
API< PARENT, SELF, ARGPTR, false > & addArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with flag only.
API< PARENT, SELF, ARGPTR, false > & addMultiArgWithFlagOnlyAndDefaultValues(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with flag only.
API< PARENT, SELF, ARGPTR, false > & addArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with name only.
API< PARENT, SELF, ARGPTR, false > & addArg(GroupIface::ArgPtr arg)
Add argument.
API< PARENT, SELF, ARGPTR, false > & addArgWithFlagAndName(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument.
API< API< PARENT, SELF, ARGPTR, false >, AllOfGroup, ARGPTR, false > addAllOfGroup(NAME &&name, bool required=false)
Add AllOfGroup.
API< PARENT, SELF, ARGPTR, false > & addMultiArg(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument.
API< PARENT, SELF, ARGPTR, false > & addMultiArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with name only.
API(PARENT &parent, SELF &self)
PARENT & end() const
End this group.
PARENT & addMultiArgWithNameOnlyAndDefaultValues(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with name only.
PARENT & addArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with flag only.
PARENT & addMultiArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with name only.
API< PARENT, AtLeastOneGroup, ARGPTR, false > addAtLeastOneGroup(NAME &&name, bool required=false)
Add AtLeastOneGroup.
PARENT & addArgWithFlagAndName(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument.
API< PARENT, AllOfGroup, ARGPTR, false > addAllOfGroup(NAME &&name, bool required=false)
Add AllOfGroup.
API< PARENT, Command, ARGPTR, false > addCommandWithDefaultValues(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add Command.
API< PARENT, OnlyOneGroup, ARGPTR, false > addOnlyOneGroup(NAME &&name, bool required=false)
Add OnlyOneGroup.
PARENT & addMultiArgWithFlagOnlyAndDefaultValues(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument with flag only.
PARENT & addArgWithNameOnly(NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add argument with name only.
API< PARENT, Command, ARGPTR, false > addCommand(NAME &&name, ValueOptions opt=ValueOptions::NoValue, bool isSubCommandRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add Command.
API(PARENT &parent, SELF &self)
PARENT & addMultiArg(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument.
PARENT & addMultiArgWithFlagOnly(Char flag, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const String &defaultValue=String(), const String &valueSpecifier=String())
Add multi argument with flag only.
PARENT & addMultiArgWithDefaulValues(Char flag, NAME &&name, bool isWithValue=false, bool isRequired=false, const String &desc=String(), const String &longDesc=String(), const StringList &defaultValues=StringList(), const String &valueSpecifier=String())
Add multi argument.
std::string String
String type.
@ AllOfGroup
"All of" group.
@ MultiArg
Multi argument.
@ AtLeastOneGroup
"At least one" group.
@ OnlyOneGroup
"Only one" group.
String::value_type Char
Char type.
ValueOptions
Options for value property.
std::vector< String > StringList
List of strings.