| Home | Libraries | People | FAQ | More

## Class option_description

boost::program_options::option_description

## Synopsis

    // In header: <boost/program_options/options_description.hpp>

    class option_description {
    public:

      enum match_result { no_match, full_match, approximate_match };
      // construct/copy/destruct
      option_description();
      option_description(const char *, const value_semantic *);
      option_description(const char *, const value_semantic *, const char *);
      ~option_description();

      // public member functions
      match_result match(const std::string &, bool, bool, bool) const;
      const std::string & key(const std::string &) const;
      const std::string & long_name() const;
      const std::string & description() const;
      shared_ptr< const value_semantic > semantic() const;
      std::string format_name() const;
      std::string format_parameter() const;

      // private member functions
      option_description & set_name(const char *);
    };

## Description

Describes one possible command line/config file option. There are two kinds of properties of an option. First describe it syntactically and are used only to validate input. Second affect interpretation of the option, for example default value for it or function that should be called when the value is finally known. Routines which perform parsing never use second kind of properties -- they are side effect free.

See Also:

options_description

### `option_description` public construct/copy/destruct

1.     option_description();

2.     option_description(const char * name, const value_semantic * s);

   Initializes the object with the passed data.

   Note: it would be nice to make the second parameter auto_ptr, to explicitly pass ownership. Unfortunately, it's often needed to create objects of types derived from 'value_semantic': `options_description` d; d.add_options()("a", parameter<int>("n")->default_value(1)); Here, the static type returned by 'parameter' should be derived from `value_semantic`.

   Alas, derived->base conversion for auto_ptr does not really work, see http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2000/n1232.pdf http://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#84

   So, we have to use plain old pointers. Besides, users are not expected to use the constructor directly.

   The 'name' parameter is interpreted by the following rules:

   - if there's no "," character in 'name', it specifies long name

   - otherwise, the part before "," specifies long name and the part after -- short name.

3.     option_description(const char * name, const value_semantic * s,
                          const char * description);

   Initializes the class with the passed data.

4.     ~option_description();

### `option_description` public member functions

1.     match_result
       match(const std::string & option, bool approx, bool long_ignore_case,
             bool short_ignore_case) const;

   Given 'option', specified in the input source, returns 'true' if 'option' specifies *this.

2.     const std::string & key(const std::string & option) const;

   Returns the key that should identify the option, in particular in the `variables_map` class. The 'option' parameter is the option spelling from the input source. If option name contains '*', returns 'option'. If long name was specified, it's the long name, otherwise it's a short name with prepended '-'.

3.     const std::string & long_name() const;

4.     const std::string & description() const;

   Explanation of this option.

5.     shared_ptr< const value_semantic > semantic() const;

   Semantic of option's value.

6.     std::string format_name() const;

   Returns the option name, formatted suitably for usage message.

7.     std::string format_parameter() const;

   Returns the parameter name and properties, formatted suitably for usage message.

### `option_description` private member functions

1.     option_description & set_name(const char * name);