C ++ ma odpowiednie ciągi znaków, więc równie dobrze możesz ich używać. Znajdują się w standardowym ciągu nagłówkowym. #include <string>, aby ich użyć. Nigdy więcej przepełnień bufora strcat / strcpy; nigdy więcej brakujących terminatorów zerowych; koniec z niechlujnym ręcznym zarządzaniem pamięcią; odpowiednio policzone ciągi z odpowiednią semantyką wartości.
C ++ ma również możliwość konwertowania wartości logicznych na reprezentacje czytelne dla człowieka. Widzieliśmy wskazówki na ten temat wcześniej w przykładach iostream, ale są one nieco ograniczone, ponieważ mogą wysyłać tekst tylko do konsoli (lub za pomocą fstreams, pliku). Na szczęście projektanci C ++ nie byli kompletnymi idiotami; mamy również iostreamy, które są obsługiwane nie przez konsolę lub plik, ale przez automatycznie zarządzany bufor ciągu. Nazywają się stringstreams. #include <sstream>, aby je pobrać. Wtedy możemy powiedzieć:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b;
return converter.str();
}
Oczywiście nie chcemy tego wszystkiego pisać. Na szczęście C ++ ma również wygodną bibliotekę innej firmy o nazwie Boost, która może nam tutaj pomóc. Boost ma fajną funkcję o nazwie lexical_cast. Możemy to wykorzystać w ten sposób:
boost::lexical_cast<std::string>(my_bool)
Otóż, prawdą jest, że jest to większe obciążenie niż niektóre makra; stringstreams radzą sobie z lokalizacjami, o które możesz nie dbać, i tworzą dynamiczny ciąg (z alokacją pamięci), podczas gdy makro może dać literał łańcuchowy, co pozwala uniknąć tego. Ale z drugiej strony metoda stringstream może być używana do wielu konwersji między reprezentacjami drukowanymi i wewnętrznymi. Możesz je cofnąć; boost :: lexical_cast <bool> ("true") robi na przykład właściwą rzecz. Możesz ich używać z liczbami, a właściwie z każdym typem, z odpowiednio sformatowanymi operatorami I / O. Są więc dość wszechstronne i przydatne.
A jeśli po tym wszystkim twoje profilowanie i testy porównawcze ujawnią, że lexical_casts są niedopuszczalnym wąskim gardłem, to wtedy powinieneś rozważyć zrobienie jakiegoś makrorestrora .