program_options 变量映射更改参数
program_options variable map change parameters
在此代码中
po::options_description desc(prog + " Allowed options");
desc.add_options()
("help,h", "produce help message")
("version,v", "outputs Version of program")
("day,d", po::value<date>()->default_value(day_clock::universal_day()- single_day), "specific day format YYYY-MM-DD (default not today but today-singleday=yesterday)")
("startdate,s", po::value<date>()->default_value(day_clock::universal_day()), "start date format YYYY-MM-DD (default today)")
("enddate,e", po::value<date>()->default_value(day_clock::universal_day()), "end date format YYYY-MM-DD (default today)")
("thread,t", po::value<int>()->default_value(20), "number of threads (default 20)")
("folder,f", po::value<fs::path>()->default_value(path), "destination folder (default .)")
("candle,c", po::value<timeframe_enum>()->default_value(timeframe_enum::TICK, "TICK"), "use candles instead of ticks. Accepted values TICK M1 M2 M5 M10 M15 M30 H1 H4")
("header", po::value<bool>()->default_value(false), "include CSV header (default false)")
("symbols", po::value<std::vector<symbols_enum>>()->multitoken()->composing()->default_value(symbols_default, "GBPJPY"), "symbol list using format EURUSD EURGBP")
;
po::positional_options_description pd;
pd.add("symbols", -1);
command_line_parser parser{ argc, argv };
parser.options(desc).positional(pd);
parsed_options parsed_options = parser.run();
po::variables_map vm;
po::store(parsed_options, vm);
po::notify(vm);
if (!vm.count("startdate"))
{
vm["startdate"] = vm["day"].as<date>();
}
在最后一个 if 语句中,当我尝试通过下标更改变量映射时出现错误。
是否可以在 store() 之后更改变量映射?
variables_map 扩展了标准库映射,它覆盖了下标运算符,如下所示:
const variable_value & operator[](const std::string & name) const;
这意味着您无法更改该值,因为它是一个常量引用。
查看商店的代码,我看到以下几行:
// We need to access map's operator[], not the overriden version
// variables_map. Ehmm.. messy.
std::map<std::string, variable_value>& m = xm;
这可能意味着您可以尝试自己做类似的事情。
但是考虑到从API来看,很明显这个class的作者试图阻止你做这样的事情,所以它可能是不安全的。
在此代码中
po::options_description desc(prog + " Allowed options");
desc.add_options()
("help,h", "produce help message")
("version,v", "outputs Version of program")
("day,d", po::value<date>()->default_value(day_clock::universal_day()- single_day), "specific day format YYYY-MM-DD (default not today but today-singleday=yesterday)")
("startdate,s", po::value<date>()->default_value(day_clock::universal_day()), "start date format YYYY-MM-DD (default today)")
("enddate,e", po::value<date>()->default_value(day_clock::universal_day()), "end date format YYYY-MM-DD (default today)")
("thread,t", po::value<int>()->default_value(20), "number of threads (default 20)")
("folder,f", po::value<fs::path>()->default_value(path), "destination folder (default .)")
("candle,c", po::value<timeframe_enum>()->default_value(timeframe_enum::TICK, "TICK"), "use candles instead of ticks. Accepted values TICK M1 M2 M5 M10 M15 M30 H1 H4")
("header", po::value<bool>()->default_value(false), "include CSV header (default false)")
("symbols", po::value<std::vector<symbols_enum>>()->multitoken()->composing()->default_value(symbols_default, "GBPJPY"), "symbol list using format EURUSD EURGBP")
;
po::positional_options_description pd;
pd.add("symbols", -1);
command_line_parser parser{ argc, argv };
parser.options(desc).positional(pd);
parsed_options parsed_options = parser.run();
po::variables_map vm;
po::store(parsed_options, vm);
po::notify(vm);
if (!vm.count("startdate"))
{
vm["startdate"] = vm["day"].as<date>();
}
在最后一个 if 语句中,当我尝试通过下标更改变量映射时出现错误。
是否可以在 store() 之后更改变量映射?
variables_map 扩展了标准库映射,它覆盖了下标运算符,如下所示:
const variable_value & operator[](const std::string & name) const;
这意味着您无法更改该值,因为它是一个常量引用。 查看商店的代码,我看到以下几行:
// We need to access map's operator[], not the overriden version
// variables_map. Ehmm.. messy.
std::map<std::string, variable_value>& m = xm;
这可能意味着您可以尝试自己做类似的事情。 但是考虑到从API来看,很明显这个class的作者试图阻止你做这样的事情,所以它可能是不安全的。