提升program_options:在 3D 矢量中读取作为命令行参数
boost program_options: Read in 3d Vector as Command Line Parameter
我有
boost::program_options::options_description desc("Required options");
desc.add_options()(
detail::enu_orig_lat_opt,
boost::program_options::value<float>(),
"Origin of enu latitudinal coordinates."
)(
detail::enu_orig_lng_opt,
boost::program_options::value<float>(),
"Origin of enu longitudinal coordinates."
)(
detail::enu_orig_alt_opt,
boost::program_options::value<float>(),
"Origin of enu altitude coordinates."
);
我可以使用具有multitoken
值的单个选项,并将其类型为std::vector<float>
,或者我可以使用具有三个字段的结构并使用该类型的值。到目前为止,我一直在为这两种选择而苦苦挣扎,并且无法让它们发挥作用。上述选项(请参阅代码)的问题在于,如果用户只指定其中一个值,我必须添加代码来验证其他值的存在。
所以我在这里真的有两个问题。第一,有没有人有读取 3d 矢量的示例代码,包括负浮点数作为命令行选项?或者两个(如果不是),如果设置了一个或多个选项,那么确保指定三个相关选项的理想方法是什么?
关于验证选项组的主题,请参阅以下相关答案: C ++/boost program_options一个选项禁用其他选项
最简单的方法是使矢量类型可流:
活在魔杖盒上
#include <iosfwd>
#include <istream>
template <typename T> struct LLA {
T lat, lon, alt;
friend std::istream& operator>>(std::istream& is, LLA& lla) {
char ch;
if (is >> lla.lat >> ch && ch == ';'
&& is >> lla.lon >> ch && ch == ';'
&& is >> lla.alt)
return is;
is.setstate(std::ios::failbit);
return is;
}
};
using Origin = LLA<float>;
#include <boost/program_options.hpp>
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char** argv) {
Origin origin;
po::options_description desc;
desc.add_options()
("origin,o", po::value(&origin), "origin of enu (lat;lon;alt)")
;
auto parsed = po::parse_command_line(argc, argv, desc, po::command_line_style::default_style);
po::variables_map vm;
po::store(parsed, vm);
po::notify(vm);
std::cout << "Origin: lat:" << origin.lat << " lon:" << origin.lon << " alt:" << origin.alt << "n";
}
将打印例如
Origin: lat:3 lon:-5 alt:7
当调用时,例如
./test --origin='3;-5;7'
./test --origin '3;-5;7'
./test -0 '3;-5;7'
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 使用 istream 参数读取的 istream 函数
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- ReadFile() 读取的字节数少于其参数中的指定值
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 读取用户必须提供一些参数的文件
- C++添加检查以避免读取两个参数
- Unix 读取缓冲区参数
- 将指针作为参数分配给类变量,然后使用它抛出读取访问违规
- 我如何在燃料中读取指令,然后使用来自Infile的参数将函数形状写入外档
- 命令行参数读取文本文件
- opencl openGL互操作内核参数用于读取 写入
- 从文件中读取的二维数组作为参数
- 提升program_options:在 3D 矢量中读取作为命令行参数
- I2C dev:更改写入和读取参数
- 如何使用 MPI 程序从命令行读取参数
- 如何读取参数中的字符串
- 如何从目标中读取参数