Eu acho que depende do tamanho do projeto geral.
Em um extremo, digamos que você tenha um projeto de 1 Mloc. Para esse grande projeto, é improvável que um único indivíduo seja um "especialista" em todas as áreas envolvidas. Portanto, nesse caso, eu ficaria com os estilos de código existentes para cada componente principal. Os novos desenvolvedores escolherão uma área, aprenderão isso e é improvável que eles vejam muitos outros componentes que podem ter estilos de código diferentes.
Se o projeto for muito menor, onde é provável que as pessoas entendam toda a base de código, eu escolheria um estilo de código dominante e o manteria. Nesse caso, acho que a consistência em todo o projeto faz mais sentido, porque é provável que novos desenvolvedores trabalhem em todas as áreas do projeto.
Projetos de médio porte são talvez os mais difíceis de tomar essa decisão. Nesse caso, você deve ponderar os custos de cada abordagem e decidir qual você acha que será menos caro a longo prazo. O desafio é que os projetos de tamanho médio geralmente crescem apenas o suficiente para um refatoramento de estilo completo parecer proibitivamente caro. Você pode dar uma olhada na estrutura da árvore de códigos para ver se as coisas podem ser organizadas para agrupar estilos de código específicos.
De qualquer forma, a decisão final deve ser da equipe em que você está montando este pacote.
Alguns dos valores extremos que podem mudar meu raciocínio de cima:
Se um ou mais módulos têm um estilo atroz, não faz sentido manter isso por perto, mesmo em um projeto maior. Sim, o estilo é subjetivo, mas se você e seus colegas participantes do projeto realmente não gostam da maneira como determinadas áreas fluem, então refaça o estilo antigo e ofereça um melhor.
Se todos os estilos estiverem razoavelmente próximos um do outro, pode ser igualmente fácil declarar "aqui está o novo caminho" e usá-lo para todos os novos códigos e refatorações significativas. Isso pode tornar as revisões um pouco trabalhosas, mas, na minha experiência, a maioria das pessoas é capaz de se adaptar a essa abordagem. Ele também fornece um sinal revelador onde está o código antigo.
Às vezes, o estilo é alterado com base nas novas funcionalidades adicionadas ao idioma. O C ++ pegou vários recursos ao longo dos anos. Pode fazer sentido refatorar, conforme necessário, o estilo antigo para um estilo mais recente que aproveite esses recursos.
Algumas bibliotecas podem ter uma abordagem ou estilo particularmente idiomático. Nesse caso, eu continuaria com esse estilo para essa biblioteca, mesmo que ela possa entrar em conflito com o restante do projeto. A intenção aqui é aumentar as chances de alguém que trabalhar frobnosticatorsem outros projetos também trabalhar no seu projeto.
Alguns dos comentários mencionaram estilos imperativos e orientados a objetos como sendo uma consideração.
Módulos que são "pesados" em um estilo específico provavelmente devem permanecer assim se o módulo for de tamanho médio ou maior. Trabalhei com os três principais estilos (imperativo, objetivo e funcional) e refatorei os estilos imperativos pesados em um estilo OO. Com uma quantidade média ou maior de código, a refatoração pode ser (excepcionalmente) difícil. Minha experiência foi confusa porque eu não tinha nenhum suporte de ferramentas para ajudar na refatoração.
Eu imagino que exista uma alta correlação entre os módulos fortemente imperativos e os módulos sendo idiomáticos para nichos de desenvolvimento específicos, que remontam ao último ponto que levantei com discrepâncias. Portanto, qualquer módulo que você encontrasse para essa funcionalidade terá essa aparência e você deseja que os especialistas desse domínio também possam trabalhar com facilidade em seu projeto. Mas se houver opções e sua equipe não gostar do estilo desse módulo, investigarei as opções.
Da mesma forma, trabalhei com um módulo com estilo OO pesado em que os princípios OO foram levados longe demais e usados incorretamente. Como exemplo, as interfaces estavam sendo usadas como um substituto para a herança múltipla. E como você poderia esperar, foi uma implementação grosseira. Consegui fazer um progresso razoável na refatoração desse módulo, mas finalmente abandonei essa abordagem, pois encontrei pacotes melhores para usar.