-
|
我想对一个包含嵌套的结构体做反射。比如 struct S1 {
int i;
float f;
};
struct S2 {
char c;
S1 s;
double d;
};希望能根据上面的类型定义输出类似这样的信息: 以下是我尝试的代码 #include "ylt/reflection/member_value.hpp"
#include <format>
#include <iostream>
struct S1 {
int i;
float f;
};
struct S2 {
char c;
S1 s;
double d;
};
int main() {
using namespace ylt::reflection;
S2 s2{'c', {-1, 1.0f}, 2.0};
for_each(s2, [](auto &field, auto name, auto index) {
std::cout << std::format("index {} name {} type {} is_class {}\n", index,
name, typeid(decltype(field)).name(),
std::is_class_v<decltype(field)>);
if (std::is_class_v<decltype(field)>) {
#if 0
for_each(field, [](auto &field2, auto name, auto index) {
std::cout << std::format("\tindex {} name {} type {} is_class {}\n",
index, name, typeid(decltype(field2)).name(),
std::is_class_v<decltype(field2)>);
});
#endif
}
});
static_assert(std::is_class_v<decltype(s2.s)>);
}碰到的问题是
请问是否可能对嵌套结构体做反射?谢谢! |
Beta Was this translation helpful? Give feedback.
Answered by
qicosmos
Mar 6, 2025
Replies: 1 comment 3 replies
-
|
是你的代码写得不对。 ylt::reflection::for_each(s2, [](auto &field, auto name, auto index) {
if constexpr(std::is_class_v<std::decay_t<decltype(field)>>) {
ylt::reflection::for_each(field, [](auto &field2, auto name, auto index) {
std::cout << name << "\n";
});
}
}); |
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
linux上是没问题的。
是不是msvc版本比较低,需要vs2022.