2016-05-04 34 views
14

繼升壓說明書(http://www.boost.org/doc/libs/1_56_0/libs/locale/doc/html/using_localization_backends.html),當前使用哪個Boost UTF後端?

我可以使用設置UTF後端:

boost::locale::localization_backend_manager my = boost::locale::localization_backend_manager::global(); 
my.select("std"); 

有沒有什麼辦法,現在檢查,確實是STD後端是否使用?

我只似乎能夠得到所有可用的後端,而不是當前激活

boost::locale::localization_backend_manager lbm = boost::locale::localization_backend_manager::global(); 
auto s = lbm.get_all_backends(); 
for_each(s.begin(), s.end(), [](string& x){ cout << x << endl; }); 
+2

我能看到的最多的是管理器上的'get()',可以讓你獲取當前後端。然而,後端接口並沒有提供任何識別它們的方法,並且所有的實現都隱藏在庫的已編譯部分中,所以甚至不能嘗試進行強制類型轉換。 –

+1

我認爲你不能,至少要使用靜態'global()'助手。如果您手動將後端添加到列表中,您可能可以比較返回的auto_ptrs的基礎指針。但是由於'select()'方法可能僅適用於類別_的一個子集(允許組合不同的後端)_,我不知道該信息是多麼有用。 – sebkraemer

回答

2

不是真的,沒有。有沒有辦法讓目前後端的原因有多種:

  • 還有,讓你訪問到後端使用
  • 沒有公開的API函數使用PIMPL方法推遲後端的實際實施。還有無論是在或後端沒有任何反映自己
  • localization_backend.hpp此註釋:

    後端通常註冊本地化後端內 經理,並允許透明支持不同的後端,使用戶 可以通過簡單地將應用程序鏈接到 正確的應用程序來切換後端。

    ...

    每個後端可以用不同的默認priotiry安裝這樣 當你有兩個不同的後端工作,你可以指定priotiry所以 這個後臺會根據自己的優先級來選取。

它將執行情況的優先級功能之上不必要的複雜化,具體後端可以針對特定的語言環境類別進行設置。 Boost.Locale被設計爲「只是工作」與它配置的任何後端,透明度和二進制兼容性。正如一位評論者所說,這不是真正有用的信息,因爲您正在使用此庫來抽象出庫/平臺特定的功能。

相關問題