【发布时间】:2011-05-05 15:49:12
【问题描述】:
我需要能够让boost::program_options 解析一个双精度数组
在命令行上传递。对于正双打,这没问题,
当然(在 add_options 中使用带有std::vector<double> 的多令牌),但是对于
否定的,我知道这些都是模棱两可的论点。
以下是我想要学习的演示:
mycommand --extent -1.0 -2.0 -3.0 1.0 2.0 3.0 --some-other-argument somevalueextent 由至少一个构造函数的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;
};
我还必须提供什么来支持在 Bounds 类中使用 add_options ? ID
喜欢做类似的事情。可能吗?
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
}
【问题讨论】:
-
在与 IRC 上的 program_options 作者交谈后,确定目前这是不可能的。解决方案是禁用短选项或使用引号。我选择了引号。
-
我已经举报为ticket了,或许近期会解决:svn.boost.org/trac/boost/ticket/5201
标签: c++ command-line boost boost-program-options