Protocol++® (Protocolpp®) v5.7.2
Loading...
Searching...
No Matches
option::Arg Struct Reference

Functions for checking the validity of option arguments. More...

#include <optionparser.h>

Static Public Member Functions

static ArgStatus None (const Option &, bool)
 For options that don't take an argument: Returns ARG_NONE.
 
static ArgStatus Required (const option::Option &option, bool msg)
 Returns ARG_OK if the argument is supplied and ARG_ILLEGAL otherwise.
 
static ArgStatus Optional (const Option &option, bool)
 Returns ARG_OK if the argument is attached and ARG_IGNORE otherwise.
 

Detailed Description

Functions for checking the validity of option arguments.

Every Option has such a function assigned in its Descriptor.

Descriptor usage[] = { {UNKNOWN, 0, "", "", Arg::None, ""}, ... };
static ArgStatus None(const Option &, bool)
For options that don't take an argument: Returns ARG_NONE.
Definition optionparser.h:926
Describes an option, its help text (usage) and how it should be parsed.
Definition optionparser.h:316

A CheckArg function has the following signature:

A parsed option from the command line together with its argument if it has one.
Definition optionparser.h:443
The namespace of The Lean Mean C++ Option Parser.
Definition optionparser.h:228
ArgStatus(* CheckArg)(const Option &option, bool msg)
Signature of functions that check if an argument is valid for a certain type of option.
Definition optionparser.h:291
ArgStatus
Possible results when checking if an argument is valid for a certain option.
Definition optionparser.h:252

It is used to check if a potential argument would be acceptable for the option. It will even be called if there is no argument. In that case option.arg will be NULL.

If msg is true and the function determines that an argument is not acceptable and that this is a fatal error, it should output a message to the user before returning ARG_ILLEGAL. If msg is false the function should remain silent (or you will get duplicate messages).

See ArgStatus for the meaning of the return values.

While you can provide your own functions, often the following pre-defined checks (which never return ARG_ILLEGAL) will suffice:

  • Arg::None For options that don't take an argument: Returns ARG_NONE.
  • Arg::Optional Returns ARG_OK if the argument is attached and ARG_IGNORE otherwise.

The following example code can serve as starting place for writing your own more complex CheckArg functions:

struct Arg: public option::Arg
{
static void printError(const char* msg1, const option::Option& opt, const char* msg2)
{
fprintf(stderr, "ERROR: %s", msg1);
fwrite(opt.name, opt.namelen, 1, stderr);
fprintf(stderr, "%s", msg2);
}
{
if (msg) printError("Unknown option '", option, "'\n");
}
static option::ArgStatus Required(const option::Option& option, bool msg)
{
if (option.arg != 0)
if (msg) printError("Option '", option, "' requires an argument\n");
}
{
if (option.arg != 0 && option.arg[0] != 0)
if (msg) printError("Option '", option, "' requires a non-empty argument\n");
}
{
char* endptr = 0;
if (option.arg != 0 && strtol(option.arg, &endptr, 10)){};
if (endptr != option.arg && *endptr == 0)
if (msg) printError("Option '", option, "' requires a numeric argument\n");
}
};
@ ARG_OK
The argument is acceptable for the option.
Definition optionparser.h:256
@ ARG_ILLEGAL
The argument is not acceptable and that's fatal.
Definition optionparser.h:260
Functions for checking the validity of option arguments.
Definition optionparser.h:924

The documentation for this struct was generated from the following file: