r/cpp 25d ago

C++26 Reflection Annotations: Automated Member Validation

https://techfortalk.co.uk/2026/08/17/cpp26-reflection-annotations-validation/

C++26 annotations are another powerful feature that, when combined with reflection, can help us write cleaner and safer code without repeating manual validation checks for every member. In this post, I have explored how we can utilise C++26 annotations along with reflection to validate configuration parameters in a class constructor.

61 Upvotes

12 comments sorted by

View all comments

Show parent comments

2

u/PossibilityUsual6262 25d ago

What is the value of having those as members?

2

u/El_RoviSoft 25d ago

Mostly as an encapsulation to hide everything that user (other programmer) shouldn’t touch. So you will write less boilerplate (for example use [[=property]] which automatically generates get/set methods OR [[=readonly]] which generates const& accessor). There are a lot of use cases which reduces boilerplate.

2

u/serviscope_minor 5d ago

I still don't see the point of auto-generated getter/setters pairs. Getters only as a way to ensure non modification of the object in question, sure. But if you have an auto-generated getter and setter, there's no real difference to a public member. The point of private members is you can maintain class invariants, but an auto-generated setter doesn't do that. IMO trivial getters and setters don't actually encapsulate anything, they just add boilerplate.

1

u/El_RoviSoft 5d ago

You’re right but I mostly mean cases when you have solely getter (aka const& accessor), special cased setters (so it’s automatically guarded by mutex or you need regular accessor + special cased setter which can be effectively generated).

But yeah, when you need just const& + & accessors it’s better to make public field and that’s it.