클로드코드에 예제 내놓으라고 함
뭐 지적하니까 바로 수정해서 신뢰성은 그닥이긴 함
복잡한 이름은 수정했음
#include <meta>
#include <print>
#include <string>
template <typename T>
void print_names_values(const T& obj);
template <typename T>
void print_names();
template <typename T, typename F>
void set_variable(T& obj, std::string_view name, F value);
struct Player {
std::string name = "Hero";
int hp = 100;
float speed = 3.5f;
bool active = true;
};
int main() {
Player p;
std::println("=== field names ===");
print_names<Player>();
std::println("\n=== serialize ===");
print_names_values(p);
std::println("\n=== set_field ===");
set_variable(p, "hp", 999);
serialize(p);
}
template <typename T>
void print_names() {
template for (constexpr auto M : std::meta::nonstatic_data_members_of(^T)) {
std::println(" {}", std::meta::name_of(M));
}
}
template <typename T>
void print_names_values(const T& obj) {
std::println("{{");
template for (constexpr auto M : std::meta::nonstatic_data_members_of(^T)) {
std::println(" \"{}\": {}", std::meta::name_of(M), obj.[:M:]);
}
std::println("}}");
}
template <typename T, typename F>
void set_variable(T& obj, std::string_view name, F value) {
bool found = false;
template for (constexpr auto M : std::meta::nonstatic_data_members_of(^T)) {
if (std::meta::name_of(M) == name) {
obj.[:M:] = static_cast<decltype(obj.[:M:])>(value);
found = true;
}
}
if (!found)
std::println("[warn] field '{}' not found", name);
}
- dc official App
이게 먼 문법이노 ㄷㄷㄷㄷㄷㄷ
template for ㄷㄷㄷㄷㄷ
AI가 반복마다 타입이 달라지는 컴파일타임순회? 라네 - dc App
@나트륨찡 아래코드는 에러 for (constexpr auto M : std::meta::nonstatic_data_members_of(^Point)) { p.[:M:] // splice는 컴파일 타임 상수 M이 필요 // 하지만 for 안의 M은 런타임 변수 취급 } // ✅ OK template for (constexpr auto M : std::meta::nonstatic_data_members_of(^Point)) { p.[:M:] // M이 컴파일 타임 상수로 취급됨 } - dc App
아 먼지 알겠다 C++에서 안되던 리플렉션 이제 컴파일 타임으로 해결했구나 ㄷㄷ
@나트륨찡 ㅇㅇ 맞음 그래서 사람들이 cpp26에 기대 많이하더라 - dc App
난 아직도 17에 멈춰있다 17 써라 이기야
이번에 쓸만한 잡기능들 많이 추가댐. - dc App
@나만봐 C++ 최신은 항상 의심하고 또 의심해라 이기야 삼기야 사기야
@루도그담당(183.104) 흠.. - dc App
json같은거 직렬화할때 dto 만들기 수월해지는거겠노
C++ 진짜 파면 팔 수록 괴랄한 언어 ㅇㅇ