C ++ tem strings adequadas, então você também pode usá-las. Eles estão na string de cabeçalho padrão. #include <string> para usá-los. Chega de estouros de buffer strcat / strcpy; não há mais terminadores nulos ausentes; não há mais gerenciamento de memória manual confuso; strings contadas corretamente com semântica de valor adequada.
C ++ tem a capacidade de converter bools em representações legíveis por humanos também. Vimos dicas sobre isso antes com os exemplos do iostream, mas eles são um pouco limitados porque só podem enviar o texto para o console (ou com fstreams, um arquivo). Felizmente, os designers do C ++ não eram idiotas completos; também temos iostreams que são apoiados não pelo console ou um arquivo, mas por um buffer de string gerenciado automaticamente. Eles são chamados de streams. #include <sstream> para obtê-los. Então podemos dizer:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b; // flag boolalpha calls converter.setf(std::ios_base::boolalpha)
return converter.str();
}
Claro, não queremos digitar tudo isso. Felizmente, C ++ também tem uma biblioteca de terceiros conveniente chamada Boost que pode nos ajudar aqui. Boost tem uma função legal chamada lexical_cast. Podemos usá-lo assim:
boost::lexical_cast<std::string>(my_bool)
Agora, é verdade que essa sobrecarga é mais alta do que alguma macro; stringstreams lidam com locais com os quais você pode não se importar e criam uma string dinâmica (com alocação de memória), enquanto a macro pode gerar uma string literal, o que evita isso. Mas, por outro lado, o método stringstream pode ser usado para muitas conversões entre representações imprimíveis e internas. Você pode executá-los ao contrário; boost :: lexical_cast <bool> ("true") faz a coisa certa, por exemplo. Você pode usá-los com números e, na verdade, qualquer tipo com os operadores de E / S formatados corretamente. Portanto, eles são bastante versáteis e úteis.
E se depois de tudo isso seu perfil e benchmarking revelarem que os lexical_casts são um gargalo inaceitável, é quando você deve considerar fazer algum terror macro.