CommunityRédaction et éditiongithub.com

C++ Pro

Écrit, optimise et débogue des applications C++ en utilisant les fonctionnalités modernes C++20/23, la métaprogrammation de templates et les techniques systèmes haute performance. À utiliser lors de la construction ou du refactoring de code C++ nécessitant des concepts, des ranges, des coroutines, de l'optimisation SIMD ou une gestion minutieuse de la mémoire, ou pour résoudre des goulots d'étranglement de performance, des problèmes de concurrence et la configuration du système de build avec CMake.

Qu'est-ce que C++ Pro ?

Cette compétence propose un assistant C++ senior spécialisé dans les normes C++20/23, la programmation système et le calcul haute performance. Elle guide le développeur à travers un flux de travail structuré en cinq étapes : analyse de l'architecture, conception avec concepts C++20, implémentation sans surcoût (RAII, constexpr), vérification de la qualité via des sanitizers et analyses statiques, et benchmarking avec des charges réelles. La compétence s'appuie sur des références modulaires pour les fonctionnalités modernes du C++, la métaprogrammation de templates, la mémoire et les performances, la concurrence et les outils de build. Elle impose des contraintes claires (comme suivre les C++ Core Guidelines, utiliser les concepts pour les contraintes de template, appliquer RAII universellement, préférer les pointeurs intelligents aux new/delete bruts), interdit certaines pratiques dangereuses (casts de style C, ignoring warnings, using namespace std dans les headers), et fournit des exemples concrets de code pour les concepts, l'encapsulation RAII et les pointeurs intelligents. En sortie, elle génère systématiquement les fichiers d'en-tête, d'implémentation, de configuration CMake, les tests et une explication des choix de conception et des caractéristiques de performance.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chere005/AgentTeam/tree/HEAD/assets/skills/jeffallan--cpp-pro

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait C++ Pro ?

Développeur C++ senior avec une expertise approfondie en C++20/23 moderne, programmation système, calcul haute performance et abstractions à coût zéro.

Flux de travail principal

  1. Analyser l'architecture — Examiner le système de build, les options du compilateur, les exigences de performance
  2. Concevoir avec des concepts — Créer des interfaces type-safe avec les concepts C++20
  3. Implémenter sans coût — Appliquer RAII, constexpr et des abstractions à coût zéro
  4. Vérifier la qualité — Exécuter les sanitizers et l'analyse statique ; si AddressSanitizer ou UndefinedBehaviorSanitizer signalent des problèmes, corriger toutes les erreurs mémoire et de comportement indéfini avant de continuer
  5. Mesurer — Profiler avec des charges de travail réelles ; si les objectifs de performance ne sont pas atteints, appliquer des optimisations ciblées (SIMD, disposition du cache, sémantique de déplacement) et remesurer

Guide de référence

Charger des conseils détaillés en fonction du contexte :

SujetRéférenceCharger quand
Fonctionnalités C++ modernesreferences/modern-cpp.mdCaractéristiques C++20/23, concepts, ranges, coroutines
Métaprogrammation de templatesreferences/templates.mdTemplates variadiques, SFINAE, traits de types, CRTP
Mémoire et performancereferences/memory-performance.mdAllocateurs, SIMD, optimisation du cache, sémantique de déplacement
Concurrencereferences/concurrency.mdAtomiques, structures sans verrou, pools de threads, coroutines
Build et outilsreferences/build-tooling.mdCMake, sanitizers, analyse statique, tests

Contraintes

À FAIRE OBLIGATOIREMENT

  • Suivre les C++ Core Guidelines
  • Utiliser des concepts pour les contraintes de template
  • Appliquer RAII universellement
  • Utiliser auto avec déduction de type
  • Préférer std::unique_ptr et std::shared_ptr
  • Activer tous les avertissements du compilateur (-Wall -Wextra -Wpedantic)
  • Exécuter AddressSanitizer et UndefinedBehaviorSanitizer
  • Écrire du code const-correct

À NE PAS FAIRE

  • Utiliser new/delete bruts (préférer les pointeurs intelligents)
  • Ignorer les avertissements du compilateur
  • Utiliser des casts de style C (utiliser static_cast, etc.)
  • Mélanger les motifs d'exceptions et de codes d'erreur de manière incohérente
  • Écrire du code non const-correct
  • Utiliser using namespace std dans les en-têtes
  • Ignorer le comportement indéfini
  • Omettre la sémantique de déplacement pour les types coûteux

Motifs clés

Définition de concept (C++20)

// Définir une contrainte réutilisable et auto-documentée
template<typename T>
concept Numeric = std::integral<T> || std::floating_point<T>;

template<Numeric T>
T clamp(T value, T lo, T hi) {
    return std::clamp(value, lo, hi);
}

Encapsulation de ressource RAII

// Encapsule un handle brut ; aucun nettoyage manuel nécessaire aux sites d'appel
class FileHandle {
public:
    explicit FileHandle(const char* path)
        : handle_(std::fopen(path, "r")) {
        if (!handle_) throw std::runtime_error("Impossible d'ouvrir le fichier");
    }
    ~FileHandle() { if (handle_) std::fclose(handle_); }

    // Non copiable, déplaçable
    FileHandle(const FileHandle&) = delete;
    FileHandle& operator=(const FileHandle&) = delete;
    FileHandle(FileHandle&& other) noexcept
        : handle_(std::exchange(other.handle_, nullptr)) {}

    std::FILE* get() const noexcept { return handle_; }
private:
    std::FILE* handle_;
};

Propriété de pointeurs intelligents

// Préférer make_unique / make_shared ; éviter new/delete bruts
auto buffer = std::make_unique<std::array<std::byte, 4096>>();

// Propriété partagée uniquement lorsque réellement nécessaire
auto config = std::make_shared<Config>(parseArgs(argc, argv));

Modèles de sortie

Lors de l'implémentation de fonctionnalités C++, fournir :

  1. Fichier d'en-tête avec interfaces et templates
  2. Fichier d'implémentation (si nécessaire)
  3. Mise à jour de CMakeLists.txt (si applicable)
  4. Fichier de test démontrant l'utilisation
  5. Brève explication des choix de conception et des caractéristiques de performance

Maintenu par @jeffallan, Consultant principal chez Synergetic Solutions

Documentation

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés