C ++ uygun dizelere sahiptir, bu yüzden onları da kullanabilirsiniz. Standart başlık dizesindeler. Bunları kullanmak için #include <string>. Artık strcat / strcpy arabellek taşması yok; artık eksik boş sonlandırıcılar yok; artık karmaşık manuel bellek yönetimi yok; uygun değer semantiği ile uygun sayılan dizeler.
C ++, boolleri insan tarafından okunabilir temsillere dönüştürme yeteneğine de sahiptir. Daha önce iostream örneklerinde ipuçlarını gördük, ancak biraz sınırlıdır çünkü metni yalnızca konsola (veya fstreams, bir dosya) aktarabilirler. Neyse ki, C ++ tasarımcıları tamamen aptal değildi; ayrıca konsol veya dosya tarafından değil, otomatik olarak yönetilen bir dize arabelleği tarafından desteklenen iostream'lerimiz var. Bunlara dizi akışı denir. Bunları almak için #include <sstream>. O zaman şunu söyleyebiliriz:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b;
return converter.str();
}
Elbette bunların hepsini yazmak istemiyoruz. Neyse ki, C ++ ayrıca burada bize yardımcı olabilecek Boost adlı kullanışlı bir üçüncü taraf kitaplığına sahiptir . Boost'un lexical_cast adında güzel bir işlevi vardır. Bunu şu şekilde kullanabiliriz:
boost::lexical_cast<std::string>(my_bool)
Şimdi, bunun bazı makrodan daha yüksek ek yük olduğunu söylemek doğru; dize akışları, umursamayabileceğiniz yerel ayarlarla ilgilenir ve dinamik bir dize (bellek ayırma ile) oluştururken, makro bunu engelleyen bir değişmez dize verebilir. Ancak kapak tarafında, dizgi akışı yöntemi, yazdırılabilir ve dahili gösterimler arasında çok sayıda dönüşüm için kullanılabilir. Geriye doğru koşabilirsiniz; boost :: lexical_cast <bool> ("true"), örneğin doğru olanı yapar. Bunları sayılarla ve aslında her türden doğru formatlanmış G / Ç operatörleriyle kullanabilirsiniz. Yani oldukça çok yönlü ve kullanışlıdırlar.
Ve tüm bunlardan sonra profil oluşturma ve kıyaslamanız lexical_casts'in kabul edilemez bir darboğaz olduğunu ortaya çıkarsa, işte o zaman makro korku yapmayı düşünmelisiniz.