Skip to content

Complete Beginner Tutorial

This directory contains a complete beginner tutorial for the OnceCallback component, consisting of 13 articles that cover the full learning path from reviewing basic C++ features to component implementation and testing.

Prerequisites

First, master the core C++ features required by OnceCallback:

  1. OnceCallback Prerequisites Quick Reference: C++11/14/17 Core Features Review
  2. OnceCallback Prerequisites (Part 1): Function Types and Template Partial Specialization
  3. OnceCallback Prerequisites (Part 2): std::invoke and the Uniform Calling Convention
  4. OnceCallback Prerequisites (Part 3): Advanced Lambda Features
  5. OnceCallback Prerequisites (Part 4): Concepts and requires Constraints
  6. OnceCallback Prerequisites (Part 5): std::move_only_function (C++23)
  7. OnceCallback Prerequisites (Part 6): Deducing this (C++23)

Hands-on Practice

After learning the prerequisites, we start implementing OnceCallback:

  1. OnceCallback in Practice (Part 1): Motivation and API Design
  2. OnceCallback in Practice (Part 2): Building the Core Skeleton
  3. OnceCallback in Practice (Part 3): Implementing bind_once
  4. OnceCallback in Practice (Part 4): Cancellation Token Design
  5. OnceCallback in Practice (Part 5): then Chaining Composition
  6. OnceCallback in Practice (Part 6): Testing and Performance Comparison

Accompanying Code

The standalone C++ example code from the prerequisites section has been extracted into compilable minimal projects, located at:

code/volumn_codes/vol9/full_tutorial_codes/chrome_design/
ExampleTopicSource ArticleMinimum C++ Standard
01_move_semantics.cppMove semantics, perfect forwarding, variadic templatespre-00C++17
02_smart_pointers.cppunique_ptr, shared_ptrpre-00C++17
03_atomic_memory_order.cppatomic, memory_order, enum classpre-00C++17
04_lambda_basics.cppCapture modes, generic lambda, [[nodiscard]]pre-00C++17
05_lambda_advanced.cppmutable lambda, init capture, C++17/C++20 bindpre-03C++20
06_type_traits.cpptype traits, if constexpr, decltype(auto), ref-qualifierpre-00C++17
07_function_type_specialization.cppFunction types, FuncTraits, primary template + partial specializationpre-01C++17
08_invoke.cppstd::invoke, std::invoke_result_tpre-02C++17
09_concepts_requires.cppconcept, requires, not_the_same_t, template constructor hijackingpre-04C++20
10_move_only_function.cppstd::move_only_function construction/move/null check/SBOpre-05C++23
11_deducing_this.cppdeducing this deduction rules, lvalue interceptionpre-06C++23

Build instructions:

bash
cd code/volumn_codes/vol9/full_tutorial_codes/chrome_design
mkdir build && cd build
cmake ..
make -j$(nproc)

Built with VitePress