Принятие отрицательных чисел двойной точности с помощью boost :: program_options

Мне нужно иметь возможность boost :: program_options анализировать массив двойников которые передаются в командной строке. Для положительных дублей это не проблема, конечно (используйте мультитокен с std :: vector в add_options), но для отрицательные, я знаю, что это неоднозначные аргументы.

Вот демонстрация того, что я хотел бы рассмотреть:

mycommand --extent -1.0 -2.0 -3.0 1.0 2.0 3.0 --some-other-argument somevalue

экстент должен поддерживаться классом Bounds по крайней мере с одним конструктором. который принимает шесть отдельных T аргументов (в данном случае - double ).

template <typename T>
class Bounds
{
public:
    typedef T value_type;
    typedef typename std::vector< Range<T> >::size_type size_type;

    typedef typename std::vector< Range<T> > Ranges;

    Bounds( T minx, T miny, T minz, 
            T maxx, T maxy, T maxz)
    {
        // fill Ranges vector
    }

private:
    Ranges ranges;
};

Что еще я должен предоставить для поддержки с помощью add_options, взять в Bounds класс? мне бы хотел бы сделать что-то подобное. Возможно?

namespace po = boost::program_options;
po::options_description options("options");

options.add_options()
    ("extent,e", po::value< Bounds< double > >(), "Extent to clip points to")

po::variables_map vm;
po::store(po::command_line_parser(argc, argv).
  options(options).positional(p).run(), vm);

po::notify(vm);

if (vm.count("extent")) 
{
    Bounds<double> bounds = vm["extent"].as< Bounds<double> >();
    // do other stuff
}
13
задан Howard Butler 5 November 2010 в 14:57
поделиться