Skip to content

emmicro-us/cpp-optparse

This branch is 2 commits ahead of, 4 commits behind weisslj/cpp-optparse:main.

Folders and files

NameName
Last commit message
Last commit date
Dec 20, 2015
Dec 19, 2015
Oct 25, 2017
Apr 9, 2020
Dec 14, 2015
Nov 4, 2017
Apr 9, 2020
Feb 11, 2016
Dec 20, 2015
Apr 9, 2020
Oct 25, 2017

Repository files navigation

cpp-optparse

This is yet another option parser for C++. It is modelled after the excellent Python optparse API. Although incomplete, anyone familiar to optparse should feel at home.

  • Copyright (c) 2010 Johannes Weißl
  • License: MIT License

Design decisions

  • Elegant and easy usage more important than speed / flexibility
  • Small size more important than feature completeness, e.g.:
    • No unicode
    • No checking for user programming errors
    • No conflict handlers
    • No adding of new actions

FAQ

  • Why not use getopt/getopt_long?
    • Not C++ / not completely POSIX
    • Too cumbersome to use, would need lot of additional code
  • Why not use Boost.Program_options?
    • Boost not installed on all target platforms (esp. cluster, HPC, ...)
    • Too big to include just for option handling for many projects: 322 *.h (44750 lines) + 7 *.cpp (2078 lines)
  • Why not use tclap/Opag/Options/CmdLine/Anyoption/Argument_helper/...?
    • Similarity to Python desired for faster learning curve

Future work

  • Support nargs > 1?

Example

using optparse::OptionParser;

OptionParser parser = OptionParser() .description("just an example");

parser.add_option("-f", "--file") .dest("filename")
                  .help("write report to FILE") .metavar("FILE");
parser.add_option("-q", "--quiet")
                  .action("store_false") .dest("verbose") .set_default("1")
                  .help("don't print status messages to stdout");

optparse::Values options = parser.parse_args(argc, argv);
vector<string> args = parser.args();

if (options.get("verbose"))
    cout << options["filename"] << endl;

About

Python's excellent OptionParser in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 77.9%
  • Python 15.5%
  • Shell 4.4%
  • Makefile 1.3%
  • CMake 0.9%