简短:那里有许多聪明的库,可让您出于各种目的公开类的成员,例如序列化,暴露于lua环境等。问题是,对于每个聪明的解决方案,您都必须注册一个类的东西对于每个api,都会导致大量工作重复和重复。
什么是办法,我可以注册一个类及其成员和方法ONCE有某种附加标志,并获得各种自动生成的方法
龙:可以说我有一堂课:
class C {
public:
int i; // Some int
vec3 v; // Some non-POD value
int function(int foo, char bar) // Some function
int hidden; // Some internal stuff I don't want exposed
}
Run Code Online (Sandbox Code Playgroud)
我想做的是能够在声明时标记各种成员和方法,以将它们自动放入各种样板中:
所以声明可能看起来像:
class C {
public:
LUAREG JSON BINSER int i; // Marks member "i" to be exposed to the lua enviroment,
// JSON serialisable, binary serialisable
JSON vec3 v; // Only exposed to JSON function
LUAREG void someFunction() {} // …Run Code Online (Sandbox Code Playgroud) 我正在使用 gdb 调试 C++ 代码。有些东西正在摇晃,所以我点击“backtrace full”进行检查。不幸的是,一些成员变量是包含const static字段的类的实例。有很多const static领域。此外,这些const static字段本身就是所述类的实例:
class foo {
public:
int val;
foo(int _val) : val(_val) {}
static const foo FOO_5 = foo(5);
static const foo FOO_6 = foo(6);
static const foo FOO_7 = foo(7);
...
}
Run Code Online (Sandbox Code Playgroud)
(我真正的代码是一个字体格式化类,带有粗体、斜体、黑色、红色等预设)
结果是 gdb 感觉需要吐出const static所述类的每个成员的每个字段(以及每个成员的每个成员等)。这会导致许多屏幕上充满相同的内容const static这会导致许多屏幕上显示
gdb 文本墙:
mItems = std::vector of length 0, capacity 0, activeFormat = {
_vptr.sttfont_format = 0x555555590898 <vtable for sttfont_format+16>, r = 255 '\377', g …Run Code Online (Sandbox Code Playgroud)