Présentation de rjk::duck

rjk::duck utilise la réflexion de C++26 pour simplifier l'érasement de type. Cette bibliothèque permet de déclarer une interface et de laisser les définitions existantes gérer le reste.

Fonctionnement de rjk::duck

La bibliothèque utilise des annotations C++26 pour définir les traits. Par exemple,

[[=rjk::trait]] struct MyTrait { void foo(); int bar() const; };
La réflexion est utilisée pour interpréter les membres du trait et les convertir en un format interne.

Le mécanisme de génération de code de C++26 est limité, mais puissant. La bibliothèque utilise des blocs consteval et des expansions de paramètres pour générer des pointeurs de fonction pour chaque membre de trait.

Analyse scientifique des impacts

La bibliothèque utilise une technique d'érasement de type basée sur la réflexion pour générer des pointeurs de fonction pour chaque membre de trait. Cette technique permet de résoudre les surcharges de fonctions de manière efficace.

La bibliothèque utilise également des utilitaires tels que std::views::indices et std::views::concat pour simplifier la génération de code. La réflexion est utilisée pour déterminer les qualificateurs de membre de fonction et pour générer des pointeurs de fonction pour chaque membre de trait.

Limites et perspectives

La bibliothèque est actuellement limitée à la prise en charge de gcc avec -std=c++26 -freflection. Cependant, la bibliothèque offre une grande flexibilité et des performances élevées pour l'érasement de type.

La technique d'érasement de type utilisée par la bibliothèque est basée sur la réflexion et la génération de code. Cette technique permet de résoudre les surcharges de fonctions de manière efficace et de générer des pointeurs de fonction pour chaque membre de trait.