C++26 Reflectionで実現する美しい型消去:rjk::duck
Beautiful Type Erasure with C++26 Reflection
C++26のリフレクション機能を活用した新しい型消去ライブラリ「rjk::duck」を紹介。従来の型消去は複雑でエラーが発生しやすく、Boost.TypeErasureやFolly.Polyなどのライブラリはボイラープレートが多いという問題があった。rjk::duckは、インターフェースを一度宣言するだけで、所有・非所有セマンティクス、演算子、インターフェース合成、既存インターフェースへのアダプタ、サードパーティ型の拡張メソッドなどをサポートし、単一ヘッダで実現。実行時に基盤となる型を変更することも可能。記事では、タグ生成、vtableコード生成、オーバーロード解決、相互変換のトリックなど、リフレクションを活用した内部実装を解説する。現在はgccでのみサポート(-std=c++26 -freflection)。
リフレクションはまだメンバ関数の注入を許可していないため、最善の策は単純なラッパー型から始めて、そこからduckクラスを継承させることです。