所以我刚刚开始为我的代码添加选项支持。我可以自己做,也可以使用 boost 的程序选项。唯一阻止我使用 boost 的是我添加到项目中的另一个依赖项。但是,如果它可以轻松处理复杂对象的解析,我更愿意付出代价。
我只是根据示例尝试了类似的方法,但它不起作用:
#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;
struct Grid{
double xmin, xmax;
};
int main(int ac, char* av[])
{
try {
Grid g;
po::options_description cmd("Allowed options");
cmd.add_options()
("help", "produce help message")
("Grid", "grid information")
;
po::variables_map vm;
store(parse_command_line(ac, av, cmd), vm);
notify(vm);
if (vm.count("help")) {
cout << cmd << "\n";
return 0;
}
g = vm["Grid"].as<Grid>();
cout << g.xmin << " " << g.xmax << endl;
}
catch(exception& e)
{
cout << e.what() << "\n";
return 1;
}
return 0;
当我使用 运行代码时./a.out --Grid {-1, 1}
,我得到boost::bad_any_cast: failed conversion using boost::any_cast
. 我不明白这意味着什么,但我的猜测是我无法正确判断我的对象类型的提升Grid
。如何使用 boost 正确执行此操作?