84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
#include <iostream>
|
|
#include "refl/refl.h"
|
|
using namespace std;
|
|
using namespace refl;
|
|
struct vec3_parent {
|
|
virtual int norm(int x1, int& x2) {
|
|
x2 = x1 * x2;
|
|
return x2;
|
|
//cout << x2 << "vec3_parent::norm" << endl;
|
|
}
|
|
};
|
|
struct vec4 {
|
|
string name{ "hello" };
|
|
};
|
|
struct vec3_Meta;
|
|
struct vec3 : public vec3_parent {
|
|
using MyMeta = vec3_Meta;
|
|
__cppast(Meta = { 0.f})
|
|
float x = 1;
|
|
__cppast(Meta = { 0.f})
|
|
float y = 2;
|
|
__cppast(Meta = { 0.f})
|
|
float z = 3;
|
|
string name{ "hello" };
|
|
__cppast(Meta = { {3,4} })
|
|
int norm(int x1, int& x2)override {
|
|
int tmp = x1 * 2 + 1;
|
|
x1 = x2;
|
|
x2 = tmp;
|
|
return x2;
|
|
//cout << x2 << "vec3::norm" << endl;
|
|
}
|
|
virtual float norm1(int& x1) {
|
|
x1 = x1 * x * y * z;
|
|
x = x1;
|
|
y = x1 - 1;
|
|
//z = x1 - 10;
|
|
//cout << x1 << "::norm1" << endl;
|
|
return x1;
|
|
}
|
|
static void norm2(int x1 = 10) {
|
|
cout << x1 << "::norm2" << endl;
|
|
}
|
|
static void norm3(int x1 = 10) {
|
|
x1 = x1 * 10;
|
|
cout << x1 << "::norm3" << endl;
|
|
}
|
|
};
|
|
struct vec3_Static_Meta {
|
|
//这里好像不需要
|
|
consteval static auto __StaticFields() {
|
|
return std::make_tuple(&vec3::x, &vec3::y, &vec3::z, &vec3::norm, &vec3::norm1, &vec3::norm2);
|
|
};
|
|
consteval static auto __MakeStaticFields() {
|
|
return std::array{
|
|
StaticMemberField(&vec3::x, FName("x"), {0.f,vec4{}}),
|
|
StaticMemberField(&vec3::y, FName("y"), {0.f,{}}),
|
|
StaticMemberField(&vec3::z, FName("z"), {0.f,{}}),
|
|
StaticMethodField(&vec3::norm, FName("norm"), {{10,9},{}}),
|
|
StaticMethodField(&vec3::norm1, FName("norm1"), {{10},{}}),
|
|
StaticMethodField(&vec3::norm2, FName("norm2"), {{10},{}}),
|
|
};
|
|
}
|
|
consteval static int Size() {
|
|
return fetch_meta_size<vec3_Static_Meta>();
|
|
}
|
|
};
|
|
struct vec3_Meta : public Meta{
|
|
using MyStatic = vec3_Static_Meta;
|
|
using MyUClass = UClass_Meta<vec3, vec3_parent>;
|
|
inline static char s_data[MyStatic::Size()]{};
|
|
static auto __MakeFields() {
|
|
char* memory = &s_data[0];
|
|
return std::array{
|
|
MemberField(&vec3::x, FName("x"),memory, {0.f,vec4{}}),
|
|
MemberField(&vec3::y, FName("y"),memory, {0.f,{}}),
|
|
MemberField(&vec3::z, FName("z"),memory, {0.f,{}}),
|
|
MethodField(&vec3::norm, FName("norm"), memory, {{10,9},{}}),
|
|
MethodField(&vec3::norm1, FName("norm1"),memory, {{10},{}}),
|
|
MethodField(&vec3::norm2, FName("norm2"),memory, {{10},{}}),
|
|
};
|
|
};
|
|
};
|
|
#include "meta_vertex.inl" |