如何使用元编程通过自动生成对象来避免大量输入?
How to use metaprogramming to avoid a lot of typing by automatically generating objects?
最近,我不得不编写一个具有 110 "parameters" 的 After Effects 插件。这些参数中的每一个都必须由三种函数声明:创建、签入和签出:
PF_ADD_FLOAT_SLIDERX(ID);
但是对于要签入和签出的参数,以及提取它的值,我需要 110 个 ParamDef
个变量,还有一个 PF_Fixed
变量来保存值共 ParamDef
个:
ParamDef var;
PF_Fixed val;
PF_CHECKOUT_PARAM(ID, &var);
val = var.u.ad.value;
PF_CHECKIN_PARAM(&var)
我知道所有这些函数都是不可避免的,因为 SDK 就是这样创建的,它不是为 110 个参数设计的,但是,我的问题是,在我完成 330 个函数和 220 个变量之后(我写了一个Python 脚本来编写它们,事实上),我不得不将它们传递给 OpenGL。我愚蠢地创建了 <string, float>s
的地图。我本可以做得更好,我本可以使用元编程。但是怎么办?而不是:
map["var"] = (float) val;
我本可以做更多的事情……也许是直觉。但那会是什么?我熟悉元编程,我可以创建一个结构或一个 class,并为每个 GLSL 制服生成一个对象,并让每个 unifrom 成为一个结构,但我怎么能避免打字呢?
换句话说,元编程是否有可能自动生成对象并将自己从单调乏味中拯救出来,而不是像我那样编写一个 Python 脚本来完成它?
如果你有带有内联变量的现代 c++,你可以在文件范围内做这样的事情,例如:
inline ParamDef< your template parameters> param_1( constructor arguments);
inline ParamDef< your template parameters> param_2( constructor arguments);
我敢打赌,您实际上不需要模板元编程来满足您的要求。
最近,我不得不编写一个具有 110 "parameters" 的 After Effects 插件。这些参数中的每一个都必须由三种函数声明:创建、签入和签出:
PF_ADD_FLOAT_SLIDERX(ID);
但是对于要签入和签出的参数,以及提取它的值,我需要 110 个 ParamDef
个变量,还有一个 PF_Fixed
变量来保存值共 ParamDef
个:
ParamDef var;
PF_Fixed val;
PF_CHECKOUT_PARAM(ID, &var);
val = var.u.ad.value;
PF_CHECKIN_PARAM(&var)
我知道所有这些函数都是不可避免的,因为 SDK 就是这样创建的,它不是为 110 个参数设计的,但是,我的问题是,在我完成 330 个函数和 220 个变量之后(我写了一个Python 脚本来编写它们,事实上),我不得不将它们传递给 OpenGL。我愚蠢地创建了 <string, float>s
的地图。我本可以做得更好,我本可以使用元编程。但是怎么办?而不是:
map["var"] = (float) val;
我本可以做更多的事情……也许是直觉。但那会是什么?我熟悉元编程,我可以创建一个结构或一个 class,并为每个 GLSL 制服生成一个对象,并让每个 unifrom 成为一个结构,但我怎么能避免打字呢?
换句话说,元编程是否有可能自动生成对象并将自己从单调乏味中拯救出来,而不是像我那样编写一个 Python 脚本来完成它?
如果你有带有内联变量的现代 c++,你可以在文件范围内做这样的事情,例如:
inline ParamDef< your template parameters> param_1( constructor arguments);
inline ParamDef< your template parameters> param_2( constructor arguments);
我敢打赌,您实际上不需要模板元编程来满足您的要求。