我需要能夠讓boost::program_options
解析在命令行上傳遞的雙打 的數組。對於積極的雙打,這是沒有問題的,當然是 (在add_options中使用std::vector<double>
進行多重口令),但對於 否定的,我知道這些是不明確的參數。使用boost :: program_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
}
在與IRC的program_options作者交談之後,確定目前這是不可能的。解決方法是禁用短期選項或使用引號。我選擇了報價。 – 2011-01-27 16:35:43
我已經將它作爲票證報告過,也許它會在不久的將來得到解決:https://svn.boost.org/trac/boost/ticket/5201 – mloskot 2011-02-18 21:43:54