最近,我不得不编写一个具有110个“参数”的After Effects插件。这些参数中的每一个都必须通过三种函数来声明:创建,签入和签出:
PF_ADD_FLOAT_SLIDERX(ID);
但是要检入和检出参数以及提取其值,我需要110个ParamDef
变量,例如,还需要一个PF_Fixed
变量来保存{ {1}}:
ParamDef
我知道所有这些函数都是不可避免的,因为这是SDK的创建方式,它不是为110个参数设计的,但是,我的问题是,在完成330个函数和220个变量之后(我编写了Python脚本要编写它们,实际上),我不得不将它们传递给OpenGL。而且我愚蠢地创建了ParamDef var;
PF_Fixed val;
PF_CHECKOUT_PARAM(ID, &var);
val = var.u.ad.value;
PF_CHECKIN_PARAM(&var)
的地图。我本可以做得更好,也可以使用元编程。但是如何?代替:
<string, float>s
我本可以做更多……直观。但是那会是什么呢?我对元编程很熟悉,我可以创建一个结构或一个类,并为每个GLSL制服生成一个对象,并将每个unifrom都作为一个结构,但是我怎么能避免输入呢?
换句话说,元编程是否可能自动生成对象并将自己从乏味中解救出来,而不是像我一样编写能做到这一点的Python脚本?
答案 0 :(得分:0)
如果您具有带有内联变量的现代c ++,则可以在文件范围内执行以下操作:
inline ParamDef< your template parameters> param_1( constructor arguments);
inline ParamDef< your template parameters> param_2( constructor arguments);
我敢打赌,您实际上并不需要模板元编程来满足您的要求。