On 6/02/2023 22:22, Hans Dembinski wrote:
Hubert Liberacki wrote this library
https://github.com/hliberacki/cpp-member-accessor
that uses a loophole in the C++ standard which allows one to access private members and methods in classes in external libraries that are not under the control of the library author. Since the loophole is legal, it works with all major compilers and on all platforms. No special compiler flags required nor illegal macros like #define private public.
I think this should be integrated in Boost, is there interest other from myself? Is there interest from the library author in so integrating it? Certainly Boost shouldn't be in the business of integrating external
Interesting; I was aware of the technique and have used it in a couple of places where it was needed, but was not aware of this library. libraries without enthusiastic support from their original author.
Before you say it is evil, consider all the good that can be done with this in responsible hands. You can add serialisation support to classes that you do not control and you can write efficient Python bindings. I have used this library now in three projects. I used it to add serialisation support and to provide memory views of C++ structures in Python (via the Numpy module), both wouldn't have been possible to do or not would not have been efficient without this.
I do worry that making the technique too easily accessible might encourage abuse, though. Even external serialization should ordinarily be accomplished via public members where possible; it's too easy to create brittle code when using private members in the presence of any library upgrades (or library version abstraction as common in package-management systems) or polymorphism.