2016-05-04 9 views
14

Nach dem Boost-Handbuch (http://www.boost.org/doc/libs/1_56_0/libs/locale/doc/html/using_localization_backends.html),Welches Boost UTF-Backend wird derzeit verwendet?

ich mit einem UTF-Backend einstellen:

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

Gibt es eine Möglichkeit, zu überprüfen, ob nun in der Tat das std Backend verwendet wird?

Ich scheine nur in der Lage sein, alle verfügbaren Backends zu bekommen, aber nicht die zur Zeit aktiven

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

Die meisten, die ich sehen kann, ist ein 'get()' auf dem Manager, mit dem Sie das aktuelle Backend greifen können. Die Schnittstelle der Backends bietet jedoch keine Möglichkeit, sie zu identifizieren, und die gesamte Implementierung ist im kompilierten Teil der Bibliothek verborgen, sodass Sie nicht einmal versuchen können, zu konvertieren, da die Typen nicht verfügbar sind. –

+1

Ich denke, Sie können nicht, zumindest mit dem statischen 'global()' Helfer. Wenn Sie manuell Backends zur Liste hinzufügen, können Sie möglicherweise die zugrunde liegenden Zeiger der zurückgegebenen auto_ptrs vergleichen. Aber da die 'select()' - Methode nur auf eine Untergruppe von Kategorien angewendet werden kann (erlaubt das Kombinieren verschiedener Backends), bin ich mir nicht sicher, wie nützlich die Information ist. – sebkraemer

Antwort

2

Nicht wirklich, nein. Es gibt keine Möglichkeit, das aktuelle Back-End für eine Vielzahl von Gründen zu bekommen:

  • Es gibt keine öffentliche API-Funktion, die Sie auf den Back-Ends Zugriff gibt verwendet
  • verwendet das Pimpl Idiom zu verschieben die tatsächliche Implementierung der Back-Ends. Es gibt keine Reflexion entweder in oder in dem Backends mich
  • Dieser Kommentar von localization_backend.hpp:

    Backends werden in der Regel innerhalb der Lokalisierung Backends Manager registriert und transparente Unterstützung verschiedenen Backends ermöglichen, so dass ein Benutzer kann das Backend durch einfaches Verknüpfen der Anwendung mit dem richtigen verbinden.

    ...

    Jedes Backend kann mit einem anderen Standard-priotiry so installiert werden, wenn Sie mit zwei verschiedenen Backends arbeiten, können Sie priotiry so das Backend entsprechend ihrer Priorität gewählt werden angeben.

Es wäre unnötig, die Umsetzung als auf der Oberseite der Priorität-Funktion, spezifisches Backends erschweren kann für bestimmte Locale-Kategorien festgelegt werden. Boost.Locale wurde entwickelt, um mit den Backends, mit denen es konfiguriert ist, "einfach zu arbeiten", Transparenz und Binärkompatibilität zu berücksichtigen. Wie ein Kommentator sagte, handelt es sich nicht wirklich um nützliche Informationen, da Sie diese Bibliothek verwenden, um Bibliotheks-/plattformspezifische Funktionen zu abstrahieren.

Verwandte Themen