在 C++ 中实现反射的一种简易方案
背景
众所周知,C++并没有像许多语言(例如 C# 或者 Java)那样的反射(Reflection)机制,也没有类似于 Rust 的所谓过程宏(Procedural Macro)来间接实现类似的效果。虽然说大部分场景并不会涉及到类似的需求,但是一旦涉及到就非常令人头大。在这些场景下,往往需要依赖工具提供的额外支持,或者极其复杂的宏机制来达到这样的效果,案例包括 Qt 中的反射和 GDExtension 的 GDOBJECT。
这里给出一种比较简单的、不依赖于额外工具的侵入式反射实现。
简略起见(其实是因为我只做了这些),这里主要介绍类的成员和方法的反射。
对于类成员变量
这里主要讨论 const MemberType
和 MemberType
的普通的成员变量。static MemberType
不在讨论的范畴内。
对于 ClassType
类的 member
成员,我们可以通过 &ClassType::member
来获得成员变量的指针,其类型为 ClassType::MemberType*
。
我们可以使用一个自动推导类型模板参数(C++17 引入)传入这个指针。接着,用 decltype()
拿到他的类型。
1 |
|
累了先不写了,改天续上。
在 C++ 中实现反射的一种简易方案
https://lizi.moe/2025/03/19/在-C-中实现反射的一种简易方案/