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
Run Code Online (Sandbox Code Playgroud)
那么,如何使用 boost::program_options 准确提取 HOSTNAME 环境变量?
为了在没有任何名称转换的情况下提取环境变量,需要使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |