template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
class ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base
Abstract base class with common functionality for the argument builders.
This class contains functionality that doesn't depend on the argument's type.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename Action >
Adds a new action argument.
When using long/short mode, this method adds an argument that only has a short name.
When not using long/short mode, this method is identical to add_argument(T&,string_type) with a single character name.
See add_action_argument(Action,string_type) for more information.
- Template Parameters
-
Action | The type of a Callable object used for the action. |
- Parameters
-
action | The action to invoke when the argument is supplied. |
short_name | The short name of the argument. |
- Returns
- An action_argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename Action >
Adds a new action argument.
Action arguments are arguments that don't use a variable to store their value, but which invoke a function when supplied. This function must be a Callable object, such as a function pointer or lambda, which the following signature:
Parses command line arguments into strongly-typed values.
Definition: command_line_parser.h:106
Here, T
is the the type of the argument, and the value will be converted to type T
before the function is invoked. If T
is a bool
, the argument is a switch argument. Action arguments cannot be multi-value arguments. They also cannot use std::optional<T>
or have a default value.
The function is invoked immediately as the argument is encountered, before the remainder of the command line is parsed. Return false
from the function to cancel parsing, causing a parse_result with parse_error::parsing_cancelled to be returned.
- Template Parameters
-
Action | The type of a Callable object used for the action. |
- Parameters
-
action | The action to invoke when the argument is supplied. |
name | The name of the argument. |
- Returns
- An action_argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename T >
Adds a new argument, and returns an argument_builder that can be used to further customize it.
When using long/short mode, this method adds an argument that only has a short name.
When not using long/short mode, this method is identical to add_argument(T&,string_type) with a single character name.
See add_argument(T&,string_type) for more information.
- Template Parameters
-
T | The type of the argument. |
- Parameters
-
value | A reference to the storage for the argument's value. When the argument is supplied, the converted value will be written to this reference. |
short_name | The short name of the argument, used to supply it on the command line. |
- Returns
- An argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename T >
Adds a new argument, and returns an argument_builder that can be used to further customize it.
Any type T can be used as an argument type, as long as it meets the following criteria:
- It must be possible to convert a string to type T, either using stream extraction (
operator>>
), or by a specialization of the lexical_convert template.
- It must be possible to convert type T to a string using
std::format
(or libfmt if <format> is not available).
For custom argument types, you must provide either a stream extractor (operator>>
) or specialize lexical_convert, and you must provide a specialization of std::formatter
(fmt::formatter
if libfmt is being used).
Providing an std::formatter
is required so default values can be displayed in the usage help. A formatter must be provided even if you don't plan to set a default value, to prevent compiler errors (in that case, you could of course provide a non-functional, empty formatter).
Of the argument is of type std::optional<T>
, the requirements apply to the contained type, not the std::optional<T>
itself.
If type T is either bool
or std::optional<bool>
, the resulting argument will be a switch argument.
- Template Parameters
-
T | The type of the argument. |
- Parameters
-
value | A reference to the storage for the argument's value. When the argument is supplied, the converted value will be written to this reference. |
name | The name of the argument, used to supply it on the command line. |
- Returns
- An argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename T >
Adds a new multi-value argument.
When using long/short mode, this method adds an argument that only has a short name.
When not using long/short mode, this method is identical to using add_multi_value_argument(T&,string_type) with a single character name.
See add_multi_value_argument(T&,string_type) for more information.
- Template Parameters
-
T | The type of the argument's container. |
- Parameters
-
value | A reference to the container for the argument's values. When the argument is supplied, the converted value will be added to this container. |
short_name | The short name of the argument, used to supply it on the command line. |
- Returns
- A multi_value_argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
Adds the standard version argument.
This method adds an argument with the default name "Version", which invokes the specified function when supplied. The argument cancels parsing, but does not show usage help.
The argument will be called "version" (with a lowercase 'v') if the first letter of the first manually defined argument is lowercase.
You can specify a different name, as well as a custom description, using the basic_localized_string_provider class.
- Parameters
-
function | A function that displays version information. This will be called when the argument is supplied. |
- Returns
- An action_argument_builder that can be used to further customize the argument.
template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
Adds the standard version argument, using version information from the VERSIONINFO resource.
- Warning
- This function is only available when compiling for Windows.
This method adds an argument with the default name "Version", which when supplied will read the VERSION_INFO resource of the current executable, and print the product name, version and optionally copyright information to the standard output. If these resources don't exist, the text "Unknown version" is shown.
The argument will be called "version" (with a lowercase 'v') if the first letter of the first manually defined argument is lowercase.
You can specify a different name, as well as a custom description, using the basic_localized_string_provider class.
- Returns
- An action_argument_builder that can be used to further customize the argument.