Zgubiłem się w plikach nagłówkowych dla boost property_tree i biorąc pod uwagę brak dokumentacji wokół niższych warstw, zdecydowałem się zapytać, w jaki prosty sposób over-ride translatora strumienia, aby zmienić sposób analizowania wartości logicznych.Zmień sposób pobierania :: property_tree tłumaczy ciągi znaków na bool
Problem polega na tym, że po stronie wejściowej drzewa właściwości znajdują się użytkownicy i mogą modyfikować pliki konfiguracyjne. Wartość logiczna może być określona na wiele sposobów, takich jak:
dosomething.enabled=true
dosomething.enabled=trUE
dosomething.enabled=yes
dosomething.enabled=ON
dosomething.enabled=1
Domyślnym zachowaniem jest, aby sprawdzić, 0 lub 1, a następnie użyć
std::ios_base::boolalpha
aby uzyskać strumień próbować zanalizować wartość w odpowiedni sposób dla bieżących ustawień narodowych ... co może być szalone, jeśli spróbujemy wysłać plik konfiguracyjny do klientów międzynarodowych.
Jaki jest najprostszy sposób na zastąpienie tego zachowania lub tylko bool? Jest to nie tylko najłatwiejsze do wdrożenia, ale i najłatwiejsze w użyciu - aby użytkownicy mojej klasy, którzy pochodzą z programu iptree, nie musieli wykonywać żadnych specjalnych czynności dla wartości typu Boolean.
Dzięki!
No wow. Dzięki @Emile - to działa. Obecnie jest nie do odróżnienia od magii. Nie próbowałem jeszcze wyjścia, ale wygląda na to, że "fałsz" działa tylko przypadkowo; nie powinno być cytatów wokół fałszu? – Arunas
haha, i oczywiście od kiedy piszę Boost test przypadków dla kodu, jest również oczywiste, że 'str ==" 0 "' nie należy do tego samego zdania, co 'iequals (str," yes ")' – Arunas
@Arunas: Tak, powinny być cytaty w okolicy "false". Jestem zaskoczony, że nawet skompilowałem. Jeśli przejdziesz do studiowania * częściowej specjalizacji szablonów *, ta odpowiedź nie okaże się tak magiczna. :-) –