Alt text:
A screenshot from the linked article titled “Reflection in C++26”, showing reflection as one of the bullet points listed in the “Core Language” section
A screenshot from the linked article titled “Reflection in C++26”, showing reflection as one of the bullet points listed in the “Core Language” section
My bad, that’s on me, it looks like the C++ libraries I found use either templates or boost’s reflection. There might be a way to do it with macros/metaprogramming but I’m not good enough at C/C++ to know.
I’m learning rust and C at the same time and was mixing up rust’s features with C’s. Rust’s answer to reflection is largely compile-time macros/attributes and I mistakenly assumed C’s attributes worked similarly since they have the same name.
Ah. Rust’s macros and the C preprocessor’s exist in vastly different universes. The C preprocessor is literally just a fancy programmatic copy-and-paste tool. Rust macros read the input source code and then execute other source code (the macro definition) to generate new source code that the compiler then reads.
I love Rust, but Rust macros are arguably more of a footgun than compile-time reflection would be, and as amazing as
serde
is (and no, there’s nothing comparable in standard-compliant C++ yet), there’s a strong argument that compile-time reflection would be a preferable technique for deriving serialization, argument-parsing, and similar feature.