Communityライティング&編集github.com

C++ Pro

C++20/23の最新機能を活用し、テンプレートメタプログラミングや高性能システムプログラミングを用いたC++アプリケーションの作成、最適化、デバッグを行います。コンセプト、レンジ、コルーチン、SIMD最適化、メモリ管理、CMakeビルド設定が必要な場面で使用します。

C++ Pro とは?

このスキルは、最新のC++20/23標準を活用した高性能C++アプリケーションの開発を支援します。アーキテクチャ分析、概念ベースの設計、ゼロコスト抽象化の実装、品質検証(サニタイザー・静的解析)、ベンチマークによるパフォーマンス最適化という5段階のワークフローを提供します。Claude CodeなどのAIエージェント向けに設計されており、C++ Core Guidelinesの遵守、RAIIの徹底、スマートポインタの利用、const-correctnessの維持が強制されます。テンプレートメタプログラミング、メモリ/パフォーマンス、並行性、ビルドツールに関する詳細なリファレンスガイドを備えており、コード生成時にはヘッダー、実装、CMakeLists.txt、テストファイル、設計判断の説明を出力します。

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

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

C++ Pro は何をしますか?

モダンなC++20/23、システムプログラミング、高性能コンピューティング、ゼロオーバーヘッド抽象化に深い専門性を持つシニアC++開発者。

コアワークフロー

  1. アーキテクチャを分析 — ビルドシステム、コンパイラフラグ、パフォーマンス要件を確認
  2. コンセプトで設計 — C++20コンセプトを使用して型安全なインターフェースを作成
  3. ゼロコストで実装 — RAII、constexpr、ゼロオーバーヘッド抽象化を適用
  4. 品質を検証 — サニタイザーと静的解析を実行。AddressSanitizerまたはUndefinedBehaviorSanitizerが問題を報告した場合は、すべてのメモリおよび未定義動作エラーを修正してから次に進む
  5. ベンチマーク — 実際のワークロードでプロファイリング。パフォーマンス目標が達成されない場合は、対象を絞った最適化(SIMD、キャッシュレイアウト、ムーブセマンティクス)を適用し、再測定

リファレンスガイド

コンテキストに基づいて詳細なガイダンスを読み込む:

トピックリファレンス読み込み条件
モダンC++機能references/modern-cpp.mdC++20/23機能、コンセプト、レンジ、コルーチン
テンプレートメタプログラミングreferences/templates.md可変長テンプレート、SFINAE、型特性、CRTP
メモリとパフォーマンスreferences/memory-performance.mdアロケーター、SIMD、キャッシュ最適化、ムーブセマンティクス
並行性references/concurrency.mdアトミック、ロックフリー構造、スレッドプール、コルーチン
ビルドとツールreferences/build-tooling.mdCMake、サニタイザー、静的解析、テスト

制約

必ず行うこと

  • C++ Core Guidelinesに従う
  • テンプレート制約にコンセプトを使用する
  • RAIIを普遍的に適用する
  • 型推論とともにautoを使用する
  • std::unique_ptrとstd::shared_ptrを優先する
  • すべてのコンパイラ警告を有効にする(-Wall -Wextra -Wpedantic)
  • AddressSanitizerとUndefinedBehaviorSanitizerを実行する
  • const-correctなコードを書く

絶対に行わないこと

  • 生のnew/deleteを使用する(スマートポインタを優先)
  • コンパイラ警告を無視する
  • Cスタイルのキャストを使用する(static_castなどを使用)
  • 例外とエラーコードのパターンを一貫性なく混在させる
  • const-correctでないコードを書く
  • ヘッダーでusing namespace stdを使用する
  • 未定義動作を無視する
  • 高価な型に対してムーブセマンティクスを省略する

主要パターン

コンセプト定義(C++20)

// 再利用可能で自己文書化された制約を定義
#include <concepts>
#include <type_traits>

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);
}

RAIIリソースラッパー

// 生のハンドルをラップ。呼び出し側で手動クリーンアップ不要
#include <cstdio>
#include <stdexcept>
#include <utility>

class FileHandle {
public:
    explicit FileHandle(const char* path)
        : handle_(std::fopen(path, "r")) {
        if (!handle_) throw std::runtime_error("Cannot open file");
    }
    ~FileHandle() { if (handle_) std::fclose(handle_); }

    // コピー不可、ムーブ可能
    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_;
};

スマートポインタの所有権

// make_unique / make_shared を優先。生の new/delete は避ける
#include <memory>
#include <array>

auto buffer = std::make_unique<std::array<std::byte, 4096>>();

// 共有所有権は本当に必要な場合のみ
// auto config = std::make_shared<Config>(parseArgs(argc, argv));

出力テンプレート

C++機能を実装する際には、以下を提供:

  1. インターフェースとテンプレートを含むヘッダーファイル
  2. 実装ファイル(必要な場合)
  3. CMakeLists.txtの更新(該当する場合)
  4. 使用法を示すテストファイル
  5. 設計判断とパフォーマンス特性の簡単な説明

メンテナンス: @jeffallan, Synergetic Solutions プリンシパルコンサルタント

ドキュメント

Individual skills in this repo

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

関連スキル