Better C++14 Reflections Without Macros, Markup nor External Tooling

Speaker: Antony Polukhin

Audience level: Intermediate | Advanced

category

C++ was lacking the reflections feature for a long time. But a new metaprogramming trick was discovered recently: we can get some information about structure by probing it's braced initializes. Combining that trick with variadic templates, constexpr functions, implicit conversion operators, SFINAE, C++ core issues, decltype and integral constants we can count structure's fields and even deduce type of each field.

Now the best part: everything works without any additional markup nor macros typically needed to implement reflections in C++.

In this talk I explain most of the tricks in detail, starting from a very basic implementation that is only capable of detecting fields count and ending up with a fully functional prototype capable of dealing with nested structures. Many cool tricks were added recently, most of them are not described at all. Highly useful use-cases will be shown a the end of the talk. You may start experimenting right now using the implementation at https://github.com/apolukhin/magic_get.