<option> <name>debugflags</name> <type>int</type> <default>0</default> <combine> <type>or</type> <option> <value>1</value> <longopt>debugmsg</longopt> <descr>Debug messages</descr> </option> <option> <value>2</value> <longopt>debugio</longopt> <descr>Debug input and output</descr> </option> <option> <value>4</value> <longopt>debugauth</longopt> <descr>Debug authentication</descr> </option> <option> <value>8</value> <longopt>debugcommit</longopt> <descr>Debug commits</descr> </option> <!-- set all bits in debug flags --> <option> <value>255</value> <longopt>debugall</longopt> <descr>Debug everything</descr> </option> </combine> <combine> <type>and</type> <option> <value>~1</value> <longopt>nodebugmsg</longopt> <descr>Do not debug messages</descr> </option> <option> <value>~2</value> <longopt>nodebugio</longopt> <descr>Do not debug input and output</descr> </option> <option> <value>~4</value> <longopt>nodebugauth</longopt> <descr>Do not debug authentication</descr> </option> <option> <value>~8</value> <longopt>nodebugcommit</longopt> <descr>Do not debug commits</descr> </option> </combine> </option> /* ... */ #include "testoptions.h" int main(int argc, char **argv) { testoptions opts; std::list<std::string> args(opts.parse(argc, argv)->args); std::cout << "Debug level: " << opts.debugflags->value << std::endl; }
combine
sets any natural integer option
's value by combining multiple values using an OR
,
AND
, or an XOR
operation,
as specified by its type
.
The above example defines a single option value
called “debugflags” with multiple independent options
that set the value of “debugflags”:
--debugmsg
,
--debugio
,
--debugauth
,
--debugcommit
.
Specifying each option results in the associated
value
logically or-ed into
debugflags
.
The value
is inserted directly into the
generated code,
like an option's default
value.
In the above example,
--debugall
or-s all the bits into
debugflags
, and corresponding
--nodebug*
turns off the individual debug bits.
“--debugall
--nodebugio
”,
in this order, results in “debugflags” having all the
individual bits set except for the debugio
bit.
“opts.debugflags->value” gives the final
int
value after all options are processed.