Ookii.CommandLine for C++  1.0.0
Public Member Functions | Protected Member Functions | List of all members
ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base Class Referenceabstract

Abstract base class with common functionality for the argument builders. More...

#include <ookii/command_line_builder.h>

Inheritance diagram for ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base:
Inheritance graph
[legend]

Public Member Functions

 argument_builder_base (argument_builder_base &)=delete
 
virtual ~argument_builder_base ()=default
 Default destructor.
 
template<typename T >
argument_builder< typed_argument_type< T >, argument_builder_base > & add_argument (T &value, string_type name)
 Adds a new argument, and returns an argument_builder that can be used to further customize it. More...
 
template<typename T >
multi_value_argument_builder< T >::builder_type & add_multi_value_argument (T &value, string_type name)
 Adds a new multi-value argument, and returns an argument_builder that can be used to further customize it. More...
 
parser_type build ()
 Creates a basic_command_line_parser using the current options and arguments. More...
 
const string_typename () const
 Returns the name of the argument.
 
argument_builder_baseoperator= (argument_builder_base &)=delete
 
virtual owned_or_borrowed_ptr< argument_base_typeto_argument ()=0
 Converts the argument_builder_base into a command_line_argument_base that can be used by the basic_command_line_parser.
 

Protected Member Functions

 argument_builder_base (basic_parser_builder &basic_parser_builder, string_type name)
 Initializes a new instance of the argument_builder_base class. More...
 
size_t get_next_position ()
 Gets the next position for a positional argument.
 
storage_type & storage ()
 Provides access to the argument's options storage.
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ argument_builder_base()

template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base::argument_builder_base ( basic_parser_builder basic_parser_builder,
string_type  name 
)
inlineprotected

Initializes a new instance of the argument_builder_base class.

Parameters
basic_parser_builderA reference to the basic_parser_builder used to build this argument.
nameThe name of the argument.

Member Function Documentation

◆ add_argument()

template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename T >
argument_builder<typed_argument_type<T>, argument_builder_base>& ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base::add_argument ( T &  value,
string_type  name 
)
inline

Adds a new argument, and returns an argument_builder that can be used to further customize it.

Template Parameters
TThe type of the argument.
Parameters
valueA reference to the storage for the argument's value. When the argument is supplied, the converted value will be written to this reference.
nameThe name of the argument, used to supply it on the command line.

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.

◆ add_multi_value_argument()

template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
template<typename T >
multi_value_argument_builder<T>::builder_type& ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base::add_multi_value_argument ( T &  value,
string_type  name 
)
inline

Adds a new multi-value argument, and returns an argument_builder that can be used to further customize it.

Template Parameters
TThe type of the argument's container.
Parameters
valueA reference to the container for the argument's values. When the argument is supplied, the converted value will be added to this container.
nameThe name of the argument, used to supply it on the command line.

Any container type T can be used, provided it meets the following requirements.

  • It defines a type T::value_type that meets the requirements outlined in the documentation for add_argument().
  • It defines the methods T::push_back() and T::clear()

◆ build()

template<typename CharType = details::default_char_type, typename Traits = std::char_traits<CharType>, typename Alloc = std::allocator<CharType>>
parser_type ookii::basic_parser_builder< CharType, Traits, Alloc >::argument_builder_base::build ( )
inline

Creates a basic_command_line_parser using the current options and arguments.

Returns
A basic_command_line_parser that can be used to parse the arguments defined by the basic_parser_builder.

Since various values are moved out of the basic_parser_builder into the basic_command_line_parser, the basic_parser_builder should not be used after calling build().


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