Ecossistema C++: não apenas uma linguagem, mas um universo inteiro
\n\nSe você já programou em C++ por mais de algumas semanas, sabe: a biblioteca padrão é a base, mas não é tudo. O verdadeiro poder se revela quando você adiciona bibliotecas de terceiros. Imagine que você está construindo uma casa. A biblioteca padrão é a fundação e as paredes. Já bibliotecas como Boost, Qt ou OpenCV são o encanamento pronto, a fiação elétrica e a casa inteligente. Sem elas é possível, mas demorado e doloroso.
\n\nNeste artigo, vamos analisar as bibliotecas C++ populares que são realmente usadas em produção. Sem enrolação, com exemplos de código e comentários honestos. Vamos lá.
\n\nBoost: o canivete suíço do desenvolvedor C++
\n\nVamos começar com uma lenda. Boost é, sem dúvida, a coleção de bibliotecas mais famosa para C++. Muitos de seus componentes foram posteriormente incorporados ao padrão: ponteiros inteligentes, expressões regulares, sistema de arquivos. Se você está escrevendo um projeto sério, provavelmente já tem o Boost nas dependências.
\n\nO que tem dentro?
\n- \n
Boost.Asio— programação de rede e E/S assíncrona \n Boost.Beast— HTTP e WebSocket baseados em Asio \n Boost.Graph— trabalho com grafos e algoritmos neles \n Boost.Math— funções matemáticas especiais \n Boost.Serialization— serialização de dados \n
Exemplo de um cliente HTTP simples com Boost.Beast:
\n\n#include <boost/beast/core.hpp>\n#include <boost/beast/http.hpp>\n#include <boost/asio/connect.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <iostream>\n\nnamespace beast = boost::beast;\nnamespace http = beast::http;\nnamespace net = boost::asio;\nusing tcp = net::ip::tcp;\n\nint main() {\n net::io_context ioc;\n tcp::resolver resolver(ioc);\n tcp::socket socket(ioc);\n\n auto const results = resolver.resolve("example.com", "80");\n net::connect(socket, results.begin(), results.end());\n\n http::request<http::string_body> req{http::verb::get, "/", 11};\n req.set(http::field::host, "example.com");\n http::write(socket, req);\n\n beast::flat_buffer buffer;\n http::response<http::dynamic_body> res;\n http::read(socket, buffer, res);\n\n std::cout << res << std::endl;\n return 0;\n}\n\n\nBoost é item obrigatório para qualquer pessoa que trabalhe com bibliotecas C++ populares em nível profissional.
\n\nQt: quando você precisa de mais do que apenas GUI
\n\nMuitos pensam que Qt é apenas botões e janelas. Na verdade, é um framework gigantesco: rede, bancos de dados, multithreading, gráficos 2D/3D, trabalho com XML e JSON, e até aprendizado de máquina (via Qt for MCU). Qt é um ecossistema dentro do ecossistema.
\n\nPor que o Qt ainda é popular?
\n- \n
- Multiplataforma nativa (Windows, Linux, macOS, Android, iOS) \n
- Mecanismo poderoso de sinais e slots \n
- Widgets prontos e QML para interfaces \n
- Documentação excelente \n
Mini-exemplo: lendo um arquivo JSON com Qt:
\n\n#include <QCoreApplication>\n#include <QFile>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QDebug>\n\nint main(int argc, char *argv[]) {\n QCoreApplication a(argc, argv);\n\n QFile file("data.json");\n if (!file.open(QIODevice::ReadOnly)) {\n qWarning() << "Cannot open file";\n return 1;\n }\n\n QByteArray rawData = file.readAll();\n QJsonDocument doc = QJsonDocument::fromJson(rawData);\n QJsonObject obj = doc.object();\n\n qDebug() << "Name:" << obj["name"].toString();\n qDebug() << "Version:" << obj["version"].toDouble();\n\n return 0;\n}\n\n\nSe você precisa não apenas de código, mas de um aplicativo completo com interface — Qt é a sua escolha. É uma das bibliotecas C++ mais populares para desenvolvimento de interfaces gráficas.