如何使用boost :: program_options提取环境变量

How to extract environment variable with boost::program_options?

本文关键字:options 提取 环境变量 program 何使用 boost      更新时间:2023-10-16

提升文档不提供有关如何解析环境变量的示例的代码段。相比之下,它描述了附加前缀和转换为下盘的奇怪行为。我尝试提取主机名环境变量,但我能够做的是使用此代码prefix_hostname变量提取,我必须手动设置。

  std::string hostname;
  boost::program_options::options_description desc_env;
  desc_env.add_options()("hostname", boost::program_options::value<string_type>(&hostname));
  boost::program_options::variables_map vm_env;
  boost::program_options::store(boost::program_options::parse_environment(desc_env, "PREFIX_"), vm_env);
  boost::program_options::notify(vm_env);
  std::cout << "hostname: " << hostname << 'n'; // correct value of PREFIX_HOSTNAME environent variable

那么,如何使用boost :: program_options提取正式名称环境变量?

为了提取环境变量而无需任何名称转换,需要使用boost :: program_options :: parse_environment的过载。

这里的第二个参数是一个接收现有环境变量的函数,用户应响应他想填充的用户定义的选项,他想用此环境变量的值填充(如果没有,则为空字符串(。

这是代码:

std::string hostname;
boost::program_options::options_description desc_env;
desc_env.add_options()("hostname", boost::program_options::value<std::string>(&hostname));
boost::program_options::variables_map vm_env;
boost::program_options::store(boost::program_options::parse_environment(desc_env, 
    [](const std::string& i_env_var)
    {// maps environment variable "HOSTNAME" to user-defined option "hostname"
         return i_env_var == "HOSTNAME" ? "hostname" : "";
    }),
    vm_env);
boost::program_options::notify(vm_env);
std::cout << "hostname: " << hostname << 'n'; // correct value of HOSTNAME environent variable