Boost logo

Boost :

From: Thorsten Ottosen (nesotto_at_[hidden])
Date: 2004-03-19 06:51:11


Hi Vladimir,

Here are some thoughts based on reading the online docs.
I did not participate in the actual review, so I could easily
miss important design and implementation problems. So don't take my
comments too serious :-)

Section "Tutorial"
------------------------

1. I don't like that the example hardcodes strings.

2. each line should have a comment about what it does.

3. why

po::store(po::parse_command_line(ac, av, desc), vm);

instead of

po::variables_map vm = parse_command_line( ... )

or

vm.store( ... ) ? It would make it clearer what is stored in what.

4. po::variables_map is probably a std::map, right? I think that the way to
    check if an argument is a bit strange, ie,

    if (vm.count("help"))

should be

   if( vm.has_argument( "help" ) )

or something.

5. Why is it necessary to remember the type of compresion argument? ie,
could

    cout << "Compression level was set to "
           << vm["compression"].as<int>() << ".\n";

not be written as

    cout << "Compression level was set to "
           << vm["compression"] << ".\n";

? (if eg. a boost::variant is returned, it would just write the int)

6. Consider

desc.add_options()
    ("help", "produce help message")

why don't you have an add_options that take two and three arguments, så the
first empty ones can be removed?

7. In

po::value<int>(&opt)->default_value(10),

I would prefer

po::value<int>( opt, 10 ),

 8.I don't find this too readable:

po::store(po::command_line_parser(ac, av).
          options(desc).positional(p).run(), vm);

compared to

po::command_line_parser parser(ac, av);
parser.set_options( desc );
parser.set_positional_options( p );
vm.store( parser.run() );

9. Could this way of specifying composing()/default_value() be of any use

option += option<int>( "xx", "xx msg" ), option_with_default<int>( ""yy",
var_name, 0, "yy msg" ),
                option_with_compose< vector<string> >( "zz", "zz msg" );

?.

10. This

po::options_description cmdline_options;
cmdline_options.add(generic).add(config).add(hidden);

might be

po::options_description cmdline_options;
cmdline_options += generic, config, hidden;

?

11.

Have you compare with the functionality of other program option libraries?
I mean, it is always nice to know that this is just the best around :-)

br

Thorsten


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk