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

时间:2017-06-29 08:08:25

标签: c++ boost

Boost文档没有提供代码片段,并提供了有关如何解析环境变量的示例。相比之下,它描述了附加前缀和转换为小写的奇怪行为。 我试图提取HOSTNAME环境变量,但我能够做的是使用此代码提取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?

精确提取HOSTNAME环境变量

1 个答案:

答案 0 :(得分:3)

为了在没有任何名称转换的情况下提取环境变量,需要使用{:: 3}}的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