2014-02-20 81 views
1

我想要使用boost::program_options獲得輸入選項。升壓程序選項:相同的值的多個選項

我想有兩個來源的選項之一從命令行和另一個文件,但我也想有不同的選項名稱爲相同的值。

commandLine.add_options() 
("dim,d", po::value<int>(&dimension), "Problem dimension") 
("adv", po::value<bool>(&adv_enabled), "Enable/Disable advection term {1|0}") 
("div", po::value<bool>(&div_enabled), "Enable/Disable divergance term {1|0}") 

file_options.add_options() 
("dimension",po::value<int>(&dimension), "Set Problem dimension") 
("enable.advection", po::value<bool>(&adv_enabled), "Enable/Disable advection") 
("enable.divergance", po::value<bool>(&div_enabled), "Enable/Disable divergance") 

這裏我想在文件中使用命令行和分組版本中較短的版本。

有沒有辦法只是將變量傳遞給兩者,還是應該在代碼中解析它們?

+0

外貌如命令行選項值將被文件選項值覆蓋。那是你要的嗎?你嘗試執行了嗎? – HAL

+0

我想用命令行選項覆蓋文件選項,但它沒有做我想做的。我測試運行代碼,如果我用命令行更改維度,它不會更新值。 – Ashkan

回答

0

答案是在文檔中很簡單:

當然,也會有需要的值命令行和配置文件結合起來。例如,命令行上指定的優化級別應該覆蓋配置文件中的值。另一方面,包含路徑應​​該合併。

...如果在命令行和配置文件中指定了相同的值,會發生什麼情況?通常,首先存儲的值是首選。這是「 - 優化」選項發生的情況。對於「組合」選項,如「包含文件」,這些值將被合併。
http://www.boost.org/doc/libs/1_55_0/doc/html/program_options/tutorial.html#idp163316264

您可以添加該重複的命令行,並在配置選項,如果它是一個非合併選項,將優先考慮向一個第一調用po::store()