News for hackers. Stuff that matters.
Re:Reflection for C++26 by utensil4778 on Tuesday July 02, 2024 @12:39AM (#40853615)
Maybe this doesn't count as static, but I used to regularly use reflection in C# to generate code for interacting with foreign DLLs.

This was a video game mod, essentially. I needed to create a text interface to modify settings for any other mod that might be installed. Other mods would simply implement a settings class with certain attributes, then I could list out all fields and their types. The list was processed into a sort of tree presented through the chat interface. From there I can generate code to modify that settings class from outside its assembly and raise value change events.

The reflection part of that was extremely simple, but just because that's how C# works. C# makes a task like this almost trivial.

At my current job, we have a similar thing. Classes decorated with attributes. We inspect them and check the generic type they implement. This way we register message handlers by their message type dynamically. You write a handler class and it simply works.

Windows Forms had a PropertyGrid control which did the same thing as my text interface, but with a grid of properties you can edit freely.

Most of this stuff is typically done at runtime. But you could have it be static if you wanted. A precious job did this to access the backing array inside of a List<> object. I offer no explanation or excuse for that one.

Re:Reflection for C++26 by gpderetta on Tuesday July 02, 2024 @06:59AM (#40855385)
C# also has the compiler available at run time, which is an extremely powerful feature, so the line between static and dynamic reflection is blurred.
Re:Reflection for C++26 by pjmlp on Wednesday July 03, 2024 @05:54AM (#40864410)
Kind of, not when using Native AOT, and Roslyn is never available, unless packaged alongside the application.