2010-12-12 86 views
0

是否有加載動態INI文件的方法,如下所示。帶boost的動態配置program_options

[basic] 
number_of_servers=3 

[server1] 
ip=10.20.30.40 
password=sdfslkhf  

[server2] 
ip=10.20.30.41 
password=sdfslkhf 

[server3] 
ip=10.20.30.42 
password=sdfslkhf 

這裏的想法是,這裏定義的服務器非常特定於軟件的部署;所以管理員決定有多少服務器參與配置。

有沒有辦法在boost program_options中處理這個問題?

+0

你真的在配置文件中存儲密碼?或者這只是一個微不足道的例子? – 2010-12-19 14:59:48

+0

@Sam;這可能是一個真實的場景;但這是一個例子。你將如何去存儲服務訪問憑證? – 2010-12-21 11:15:58

回答

3

另一個,可能更標準的方式,會是這樣:

[basic] 
number_of_servers=3 

[server] 
name=server1 
ip=10.20.30.40 
password=sdfslkhf  

[server] 
name=server2 
ip=10.20.30.41 
password=sdfslkhf 

[server] 
name=server3 
ip=10.20.30.42 
password=sdfslkhf 

這樣,你不必擔心不確定的節名,而且我認爲這種風格被越來越廣泛的應用,以及(絕對這就是QuickFIX的做法,與我所概述的方式非常相似)。

而且您可能會刪除number_of_servers條目,並使用count()函數來查找有多少個server部分。

+0

謝謝約翰;我試圖這樣做,但我似乎無法得到它的工作。順便說一句,我尋找QuickFIX,我無法找到任何地方。 – 2010-12-14 23:18:18

+0

你是什麼意思,你似乎無法得到它的工作?你有沒有放棄或想出另一種解決方案?你的意思是你找不到QuickFIX?谷歌認爲它沒有問題。 – 2010-12-18 17:45:44

+0

可能是我不得不花更多的時間試圖破解這個。我最近重做了我的優先事項;這仍然在我的名單上。對不起,我無法回來。在QuickFIX上,我確實看到了源代碼樹,但是我無法在那裏看到program_options的用法。 – 2010-12-21 11:11:22

0

當然可以。服務器部分有一個模式:只需將所有匹配模式的人加載到服務器列表中。

+0

謝謝。不知道如何去做你的建議。我對program_options很新穎。據我所知,我需要在options_description中定義選項,然後才能解析配置文件。這是不對的? – 2010-12-12 23:35:13

0

解決這個問題時我面臨的挑戰是確保各部分保持在一起並且沒有任何混淆。最後,我依賴一個帶已知/有限選項的options_description,然後使用來自parse_config_file的parsed_options,我不得不收集所有無法識別的選項(collect_unrecognized)。然後我不得不迭代它來依次選擇選項。

感謝每一位的貢獻。

相關問題