Estou procurando um bom recurso para aprender sobre o bom design de API para bibliotecas C ++, examinar objetos / dlls compartilhados etc. Há muitos recursos para escrever boas APIs, boas classes, modelos etc. no nível da fonte, mas quase nada sobre reunindo coisas em bibliotecas e executáveis compartilhados. Livros como o Design de software C ++ em larga escala de John Lakos são interessantes, mas estão desatualizados.
O que estou procurando é um conselho, por exemplo, sobre como lidar com modelos. Com os modelos na minha API, muitas vezes acabo com o código da biblioteca no meu executável (ou outra biblioteca), por isso, se eu corrigir um bug, não posso simplesmente lançar a nova biblioteca, mas preciso recompilar e redistribuir todos os clientes desse código. (e sim, conheço algumas soluções, como tentar instanciar pelo menos as versões mais comuns dentro da biblioteca etc.)
Também estou procurando outras advertências e outras questões a serem mantidas para manter a compatibilidade binária enquanto estiver trabalhando nas bibliotecas C ++.
Existe um bom site ou livro sobre essas coisas?
fonte
std::unique_ptr
é uma coisa bem nova. O que exatamente você achou mais adequado sobre sua API proposta? A maneira pela qual você teve que gerenciar manualmente todos os recursos, praticamente garantindo vazamentos e exclusões duplas, por exemplo? Ou a maneira pela qual muitos de seus tipos tinham nomes de uma ou duas letras, impossibilitando a divisão de seus propósitos?unique_ptr
, não seria possível escrever um código assim.Respostas:
De fato, existe um livro que é exatamente o que você procura. É chamado, apropriadamente, API Design for C ++. O site do livro também contém o código-fonte e as Erratas .
fonte
Isso é praticamente impossível. O fato simples é que, às vezes, você precisa do compilador para fazer um trabalho e não pode simplesmente afastar essa necessidade. Não há função que possa criar
std::vector
uma biblioteca não somente de cabeçalho. O compilador pode fazer muitas mágicas funcionarem, mas você não pode tê-las sem invocá-lo, e isso é um fato da vida.Aqui está o que você pode fazer: não use modelos onde não precisar deles. Aqui está o que você não pode fazer: mais nada.
O fato simples é que a recompilação com a nova versão não é realmente tão difícil em comparação com as vantagens de desempenho, segurança e funcionalidade que você pode obter com bibliotecas com tipos estatísticos.
fonte