如何使用元编程来通过自动生成对象来避免大量输入?

时间:2019-03-07 11:50:08

标签: c++ metaprogramming

最近,我不得不编写一个具有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脚本?

1 个答案:

答案 0 :(得分:0)

如果您具有带有内联变量的现代c ++,则可以在文件范围内执行以下操作:

inline ParamDef< your template parameters> param_1( constructor arguments);
inline ParamDef< your template parameters> param_2( constructor arguments);

我敢打赌,您实际上并不需要模板元编程来满足您的要求。