Aller au contenu
Bienvenue sur la nouvelle documentation de CppUtils !

Bibliothèque CppUtils

Composants C++26 modulaires pour compilateurs et applications modernes.

CppUtils se compose de plusieurs grandes bibliothèques modulaires (tests unitaires, réseau, topologie de graphes) accompagnées de nombreux utilitaires spécialisés. Les modules C++20 permettent d’importer aisément l’ensemble en une seule directive (import CppUtils;) sans alourdir le binaire final, seuls les composants effectivement utilisés étant intégrés lors de la compilation.

CppUtils repose sur des principes directeurs sans concession :

Boîte à outils riche & modulaire

Réunit l’essentiel (conteneurs, concurrence, réseau, parsing, tests, crypto, etc.) pour éliminer la prolifération de dépendances externes. Grâce aux modules C++, cette richesse favorise une réutilisabilité maximale sans aucun surcoût :

  • À la carte ou globale : importez un sous-domaine ciblé (import CppUtils.Container;) ou tout le catalogue (import CppUtils;).
  • Zéro empreinte superflue : seuls les composants effectivement appelés sont incorporés au binaire final.
  • Isolation hermétique & compilation accélérée : chaque module n’est compilé qu’une seule fois, allégeant massivement les temps de compilation par rapport aux en-têtes préprocesseur (#include).

Intégration non invasive & programmation par contrat

Aucun verrouillage ni contamination architecturale : CppUtils ne cherche jamais à imposer ses types ni à coloniser votre codebase.

  • Conception non invasive & zéro contagion : contrairement à des frameworks invasifs comme Qt qui imposent partout leur méta-compilateur propriétaire (moc), leurs types fermés (QString, QByteArray) et de lourdes hiérarchies d’héritage, CppUtils reste strictement non invasif et ne propage aucune adhérence virale : l’objectif n’est jamais de vous rendre captif d’un écosystème propriétaire (vendor lock-in).
  • Programmation par contrat : les interfaces s’expriment via des concepts standards (std::ranges::input_range, std::formattable, std::invocable, etc.) plutôt que des types figés et imposés : vos conteneurs se propagent sans copie ni conversion superflue (en savoir plus sur la programmation par contrat avec auto et les concepts sur mon blog).
  • Adoption ciblée : intégrez un composant unique (MultiKeyMap, UniqueLocker) en toute indépendance, sans devoir importer le reste du catalogue.

À la pointe du C++26 & zéro dette technique

Alignement assumé sur le dernier standard (C++26) pour délivrer immédiatement l’état de l’art : modules natifs, typage monadique, concepts avancés, sécurité accrue et réflexivité.

  • Zéro compromis sur l’obsolescence : aucun maintien artificiel de pratiques dépassées ni accumulation de dette technique.
  • Transition pragmatique : des gardes de fonctionnalités ciblées (__cpp_lib_*) facilitent la compilation sur les compilateurs récents au support C++26 encore partiel, sans alourdir le code de couches de compatibilité rétrograde.
  • Architecture pérenne : refactorisations continues pour préserver une base de code moderne, saine et prête pour l’avenir.

Performance & bonnes pratiques modernes

La performance maximale sans jamais sacrifier la clarté ni la sécurité :

  • Lisibilité & simplicité : interfaces épurées, transparentes et auto-documentées, sans complexité accidentelle ni magie obscure.
  • Performance sans compromis : abstractions à coût nul (zero-cost), agencement mémoire adapté au cache et évaluation maximale à la compilation (constexpr, consteval).
  • Bonnes pratiques modernes : gestion par RAII systématique, typage fort validé par concepts et rejet des macros préprocesseur (plusieurs de ces bonnes pratiques sont détaillées sur mon blog).

Si vous appréciez CppUtils et souhaitez soutenir son développement indépendant, vous pouvez parrainer le projet sur GitHub Sponsors :

Sponsoriser sur GitHub

  • MorganCaron
  • Arthapz