Commit b0f67a06de3446aa97a4943ad0ad6086460b2b61

Authored by Tomas Barton
Committed by GitHub
1 parent 6fa46a74

Code highlighting, add more examples (#220)

Showing 1 changed file with 63 additions and 12 deletions
README.md
@@ -25,18 +25,26 @@ Additionally, anything after `--` will be parsed as a positional argument. @@ -25,18 +25,26 @@ Additionally, anything after `--` will be parsed as a positional argument.
25 25
26 ## Basics 26 ## Basics
27 27
28 - #include <cxxopts.hpp> 28 +```cpp
  29 +#include <cxxopts.hpp>
  30 +```
29 31
30 -Create a cxxopts::Options instance. 32 +Create a `cxxopts::Options` instance.
31 33
32 - cxxopts::Options options("MyProgram", "One line description of MyProgram"); 34 +```cpp
  35 +cxxopts::Options options("MyProgram", "One line description of MyProgram");
  36 +```
33 37
34 Then use `add_options`. 38 Then use `add_options`.
35 39
36 - options.add_options()  
37 - ("d,debug", "Enable debugging")  
38 - ("f,file", "File name", cxxopts::value<std::string>())  
39 - ; 40 +```cpp
  41 +options.add_options()
  42 + ("d,debug", "Enable debugging") // a bool parameter
  43 + ("i,integer", "Int param", cxxopts::value<int>())
  44 + ("f,file", "File name", cxxopts::value<std::string>())
  45 + ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("false"))
  46 + ;
  47 +```
40 48
41 Options are declared with a long and an optional short option. A description 49 Options are declared with a long and an optional short option. A description
42 must be provided. The third argument is the value, if omitted it is boolean. 50 must be provided. The third argument is the value, if omitted it is boolean.
@@ -44,12 +52,16 @@ Any type can be given as long as it can be parsed, with operator&gt;&gt;. @@ -44,12 +52,16 @@ Any type can be given as long as it can be parsed, with operator&gt;&gt;.
44 52
45 To parse the command line do: 53 To parse the command line do:
46 54
47 - auto result = options.parse(argc, argv); 55 +```cpp
  56 +auto result = options.parse(argc, argv);
  57 +```
48 58
49 To retrieve an option use `result.count("option")` to get the number of times 59 To retrieve an option use `result.count("option")` to get the number of times
50 it appeared, and 60 it appeared, and
51 61
52 - result["opt"].as<type>() 62 +```cpp
  63 +result["opt"].as<type>()
  64 +```
53 65
54 to get its value. If "opt" doesn't exist, or isn't of the right type, then an 66 to get its value. If "opt" doesn't exist, or isn't of the right type, then an
55 exception will be thrown. 67 exception will be thrown.
@@ -80,7 +92,9 @@ vector to the `help` function. @@ -80,7 +92,9 @@ vector to the `help` function.
80 Positional arguments can be optionally parsed into one or more options. 92 Positional arguments can be optionally parsed into one or more options.
81 To set up positional arguments, call 93 To set up positional arguments, call
82 94
83 - options.parse_positional({"first", "second", "last"}) 95 +```cpp
  96 +options.parse_positional({"first", "second", "last"})
  97 +```
84 98
85 where "last" should be the name of an option with a container type, and the 99 where "last" should be the name of an option with a container type, and the
86 others should have a single value. 100 others should have a single value.
@@ -92,12 +106,16 @@ An option can be declared with a default or an implicit value, or both. @@ -92,12 +106,16 @@ An option can be declared with a default or an implicit value, or both.
92 A default value is the value that an option takes when it is not specified 106 A default value is the value that an option takes when it is not specified
93 on the command line. The following specifies a default value for an option: 107 on the command line. The following specifies a default value for an option:
94 108
95 - cxxopts::value<std::string>()->default_value("value") 109 +```cpp
  110 +cxxopts::value<std::string>()->default_value("value")
  111 +```
96 112
97 An implicit value is the value that an option takes when it is given on the 113 An implicit value is the value that an option takes when it is given on the
98 command line without an argument. The following specifies an implicit value: 114 command line without an argument. The following specifies an implicit value:
99 115
100 - cxxopts::value<std::string>()->implicit_value("implicit") 116 +```cpp
  117 +cxxopts::value<std::string>()->implicit_value("implicit")
  118 +```
101 119
102 If an option had both, then not specifying it would give the value `"value"`, 120 If an option had both, then not specifying it would give the value `"value"`,
103 writing it on the command line as `--option` would give the value `"implicit"`, 121 writing it on the command line as `--option` would give the value `"implicit"`,
@@ -134,6 +152,39 @@ The string after the program name on the first line of the help can be @@ -134,6 +152,39 @@ The string after the program name on the first line of the help can be
134 completely replaced by calling `options.custom_help`. Note that you might 152 completely replaced by calling `options.custom_help`. Note that you might
135 also want to override the positional help by calling `options.positional_help`. 153 also want to override the positional help by calling `options.positional_help`.
136 154
  155 +
  156 +## Example
  157 +
  158 +Putting all together:
  159 +```cpp
  160 +int main(int argc, char** argv)
  161 +{
  162 + cxxopts::Options options("test", "A brief description");
  163 +
  164 + options.add_options()
  165 + ("b,bar", "Param bar", cxxopts::value<std::string>())
  166 + ("d,debug", "Enable debugging", cxxopts::value<bool>()->default_value("false"))
  167 + ("f,foo", "Param foo", cxxopts::value<int>()->default_value("10"))
  168 + ("h,help", "Print usage")
  169 + ;
  170 +
  171 + auto result = options.parse(argc, argv);
  172 +
  173 + if (result.count("help"))
  174 + {
  175 + std::cout << options.help() << std::endl;
  176 + exit(0);
  177 + }
  178 + bool debug = result["debug"].as<bool>();
  179 + std::string bar;
  180 + if (result.count("bar"))
  181 + bar = result["bar"].as<std::string>();
  182 + int foo = result["foo"].as<int>();
  183 +
  184 + return 0;
  185 +}
  186 +```
  187 +
137 # Linking 188 # Linking
138 189
139 This is a header only library. 190 This is a header only library.