そのため、コードにオプションサポートを追加し始めました。自分で行うことも、ブーストのプログラムオプションを使用することもできます。Boostを使用することを妨げているのは、プロジェクトに追加しているもう1つの依存関係だけです。ただし、複雑なオブジェクトの解析を簡単に処理できるのであれば、私はもっと喜んで代償を払います。
例に基づいてこのようなことを試しましたが、機能しません。
#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
。ブーストでこれを正しく行うにはどうすればよいですか?