2017-06-29 11 views
0

Boostのドキュメントでは、環境変数を解析する方法の例を示すコードスニペットを提供していません。対照的に、接頭辞を追加して小文字に変換するという奇妙な動作を記述します。 私はHOSTNAME環境変数を抽出しようとしましたが、私は手動で設定しなければならなかったこのコードPREFIX_HOSTNAME変数を使って抽出することができました。boost :: program_optionsで環境変数を抽出するには?

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

名前変換なしで環境変数を抽出するには、boost :: program_options :: parse_environmentのthis overloadを使用する必要があります。

ここで2番目の引数は、既存の環境変数を受け取り、ユーザーがこの環境変数の値を入力するユーザー定義オプションのいずれかに応答する関数です(存在しない場合は空の文字列)。ここで

はコードです:

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