Having fun in life!

Eu estava falando com um amigo sobre autômato celular dando como exemplo o Conway’s Game of Life. Isso aguçou a minha curiosidade e depois de tantos anos que vi isso pela última vez, li o artigo da Wikipedia e achei fascinante. Qual a melhor forma de aprender mais sobre o algoritmo? Implementando! Porém, eu não…

Policy-based design: log writer

Policy-based design Vamos neste artigo dar mais uma pincelada no Policy-based design. Vamos fazer como exemplo uma classe de log. Como este é só um exemplo, não vamos considerar múltiplos parâmetros no log, mas somente uma string, assim não fugiremos do assunto. Uma das coisas mais importantes neste tipo de design é o desacoplamento. Ele…

Leitura de configuração em C++

Uma coisa que é comum no ambiente Java e que eu gosto muito são os arquivos de properties. Não é de hoje que eu os uso para configurar aplicações que eu faço. Eu tinha uma classe de configuração feita na época do C++98 e que hoje, usando, fiquei com vontade de reescrevê-la para ficar com…

Legibilidade com C++14 – get_numeric

Eu escrevi um código em C++ há um tempo atrás e quando olhei hoje vi como a legibilidade mudou desde o C++11. Neste código eu vi algumas coisas interessantes. Ele serve bem de exemplo para alguns tipos de codificação Codificação concreta Codificação genérica Codificação concreta com C++ moderno Codificação genérica com C++ moderno Vamos ver…

Layout de memória de structs e classes

Como a memória é alocada em structs e classes Seguindo o post de dependências entre headers (Dependência cíclica de headers). Me perguntaram a razão do C++ não fazer o demangling dos nomes simplesmente quando uma variável de classe é declarada e também porque isso é diferente do Java, onde eu simplesmente coloco o nome da…

Dependência cíclica de headers

Uma coisa que acaba atrapalhando quem está começando no C++ é a dependência cíclica dos headers. Quando estamos escrevendo programas minúsculos isso não acontece, mas é um cenário muito comum. Antes de falar mais sobre as dependências, vamos entender um pouco da inclusão destes headers. Como funciona o famoso #include ? Supondo que temos 3 arquivos: main.cpp, main.h…

Range loops – Escrevendo código seguro

Eu estava olhando um código de um sistema e me deparei com um trecho que me fez torcer o nariz. O código funcionava, mas imediatamente vi dois problemas potenciais: Bug de int/unsigned int Um vector::size() – 1 Se size for 0, o resultado será 4294967295 ou 0xFFFFFFFF! Código confuso e facilmente quebrável msgs[count] – Não…

Por quê usar templates ?

Se você não está usando templates com C++, você está perdendo toda a diversão. A linguagem C++, apesar de suportar orientação a objetos, diferentemente de Java, não te “obriga” a usá-la. Você poderá ter o melhor dos mundos, em termos dos paradigmas e idiomas. Um pouco de orientação a objetos aqui e programação genérica ali,…