Der C++-Beispielsammlung
ist eine Sammlung von acht eigenständigen C++23-Projekten, die verschiedene Konzepte der modernen C++-Programmierung demonstrieren.
Jedes Projekt enthält Quellcode, eine README.md
mit Projektbeschreibung sowie eine MIT-Lizenz.
Die Sammlung eignet sich sowohl für Lernzwecke als auch als Referenz für fortgeschrittene C++-Techniken.
Projekt | Beschreibung |
---|---|
Binding | Bindung von Funktionsargumenten, Mitgliedsfunktionen und Datenmembern in einem Nachrichtenverarbeitungskontext. |
Invokable | Verwendung von std::invoke für freie Funktionen, Lambdas, Mitgliedsfunktionen und Funktionsobjekte. |
Lambda | Nutzung von Lambdas, Algorithmen (std::for_each , std::partial_sum , std::all_of , std::none_of ) und Funktionsbindungen. |
LambdaThread | Multithreading mit std::jthread und Lambda-Ausdrücken, inklusive synchronisierter Ausgabe. |
Multithreading | Verwaltung von Haupt-, System-, Status- und Abschlussmeldungen in parallelen Threads. |
SharedPtr | Nutzung von std::shared_ptr in C++23 für geteilte Ressourcenverwaltung, Multithreading und polymorphe Objekte. |
ThreadDeadLock | Demonstration eines Deadlocks und wie man ihn vermeidet. |
ThreadRaceCondition | Beispiel für eine Race Condition und deren Lösung mit std::mutex . |
- Compiler: GCC 15.1.0 oder höher (MSYS2 UCRT64,
C:\msys64\ucrt64\bin\g++.exe
) - CMake: Version 3.27 oder höher
- Ninja: Build-System für CMake
- VS Code: Mit den Erweiterungen C/C++ und CMake Tools
- MSYS2 UCRT64: Für Compiler und Build-Tools
git clone <repository-URL>
cd C++-Beispielsammlung
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-gdb
Öffne den Hauptordner C++-Beispielsammlung
in VS Code.
{
"C_Cpp.default.compilerPath": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"cmake.generator": "Ninja",
"cmake.sourceDirectory": "${workspaceFolder}",
"cmake.buildDirectory": "${workspaceFolder}/_dummy_",
"cmake.configureOnOpen": false
}
💡 Hinweis: Die Datei .vscode/settings.json nutzt hier den absoluten Compiler-Pfad. Sollte die Umgebungsvariable MSYS2_PATH für (z. B. C:\msys64\ucrt64\bin) in deiner Umgebung gesetzt sein, dann benutze: "C_Cpp.default.compilerPath": "${env:MSYS2_PATH}/g++.exe"
[
{
"name": "GCC 15.1.0 UCRT64",
"preferredGenerator": { "name": "Ninja" },
"compilers": {
"C": "C:\\msys64\\ucrt64\\bin\\gcc.exe",
"CXX": "C:\\msys64\\ucrt64\\bin\\g++.exe"
},
"environmentVariables": {
"PATH": "C:\\msys64\\ucrt64\\bin;${env:PATH}"
}
}
]
-
Öffne die Befehlspalette mit
Strg+Shift+P
und wähleTasks: Run Task
-
Wähle z. B.
Build Binding
-
Intern wird dabei ausgeführt:
cmake -S Binding -B Binding/build && cmake --build Binding/build
-
Das erzeugte Binärdatei liegt danach z. B. unter
Binding/build/
cmake -S Binding -B Binding/build
cmake --build Binding/build
Binding/build/Binding.exe
⚠️ Jeder Build erfolgt lokal im jeweiligen Projektordner – z. B.Binding/build/
,Lambda/build/
, usw. Das Hauptverzeichnis bleibt frei von Build-Artefakten.
Die CMake-Build-Tasks in .vscode/tasks.json
nutzen Bash (MSYS2) anstelle der Standard-PowerShell.
Dies ist notwendig, da PowerShell keine verketteten Shell-Befehle wie &&
korrekt verarbeitet.
Damit der Build funktioniert, wird in tasks.json
explizit Bash angegeben:
"options": {
"cwd": "${workspaceFolder}",
"shell": {
"executable": "C:\\msys64\\usr\\bin\\bash.exe",
"args": ["-c"]
}
}
Vorteil: Die globale Shell (z. B. für Python-Projekte) bleibt PowerShell – Bash wird nur lokal für die C++-Build-Tasks verwendet.
Erforderlich: Stelle sicher, dass bash.exe
unter C:\msys64\usr\bin\bash.exe
existiert (Standardpfad bei MSYS2).
- Ohne Debugging:
Strg+F5
- Mit Debugging:
F5
- Breakpoints, Variableninspektion und Konsolenausgabe funktionieren wie gewohnt.
Dieses Projekt sowie alle enthaltenen Unterprojekte stehen unter der MIT-Lizenz. Details findest du in der zentralen Lizenzdatei.
Beiträge sind willkommen! Bitte eröffne ein Issue oder einen Pull Request auf GitHub.