企业网站建设教程 pdf,新泰网页设计,微信到wordpress,网站是由多个网页组成的吗在 C 中实现反射机制#xff0c;虽然不像其他高级语言那样直接#xff0c;但可以通过宏、模板和注册系统等技术来实现一个简易的反射系统。下面是一个完整的 C 反射机制示例#xff0c;通过自定义类注册系统和宏定义#xff0c;实现类的名称、属性、方法的反射 。
#includ… 在 C 中实现反射机制虽然不像其他高级语言那样直接但可以通过宏、模板和注册系统等技术来实现一个简易的反射系统。下面是一个完整的 C 反射机制示例通过自定义类注册系统和宏定义实现类的名称、属性、方法的反射 。
#include iostream
#include string
#include map
#include functional#define REFLECTABLE \static std::mapstd::string, std::functionstd::string(MyClass) GetProperties() { return {__PROPERTIES__}; }#define PROPERTY(name) {#name, [](MyClass obj) - std::string { return std::to_string(obj.name); }}class Vector3 {
public:float x, y, z;Vector3(float x 0, float y 0, float z 0) : x(x), y(y), z(z) {}std::string ToString() const {return Vector3( std::to_string(x) , std::to_string(y) , std::to_string(z) );}
};class MyClass {
public:int myInt;std::string myString;Vector3 position;MyClass(int i, const std::string s, Vector3 p) : myInt(i), myString(s), position(p) {}// 宏定义放在这里
#define __PROPERTIES__ \PROPERTY(myInt), \{ myString, [](MyClass obj) - std::string { return obj.myString; } }, \{ position, [](MyClass obj) - std::string { return obj.position.ToString(); } }REFLECTABLE
};void PrintReflectionInfo(MyClass obj) {auto properties MyClass::GetProperties();for (const auto prop : properties) {std::cout prop.first : prop.second(obj) std::endl;}
}int main() {MyClass obj(42, Hello, Vector3(1.0f, 2.0f, 3.0f));PrintReflectionInfo(obj);return 0;
}