我不确定这是否符合你的需求,我已经使用代码生成器来生成C++代码。
特别是Python Cheetah。你可以在C++代码中直接嵌入Python代码并通过Cheetah预处理器运行它。相比使用模板或C++预处理器,它可以更轻松地进行相当复杂的计算,还可以获得所有Python库和扩展。但另一方面,如果出现问题,调试会变得更加困难。如果你有兴趣,我可以提供一些示例和用于编辑Cheetah C++程序的Emacs模式。
如果您需要功能较弱且希望留在C++ C内部,请查看boost preprocessor,这里。花一点时间适应它可能很有用,尤其是当涉及到重复代码时。
好的,我正在粘贴Cheetah示例,请给我几分钟时间:
#if defined (__INTEL_COMPILER)
#pragma vector aligned
#endif
for(int a = 0; a < $N; ++a) {
/// for functions in block
/// can also use (ix,iy,iz)=fi[0:2], need to clean up when not lazy
q$(i) += Ix(a,$(ix),$(jx))*Iy(a,$(iy),$(jy))*Iz(a,$(iz),$(jz));
/// end for functions in block
}
运行
cheetah ...
后,会产生以下结果:
#if defined (__INTEL_COMPILER)
#pragma vector aligned
#endif
for(int a = 0; a < 6; ++a) {
q0 += Ix(a,0,1)*Iy(a,0,0)*Iz(a,0,0);
q1 += Ix(a,1,1)*Iy(a,0,0)*Iz(a,0,0);
q2 += Ix(a,0,1)*Iy(a,1,0)*Iz(a,0,0);
q3 += Ix(a,0,1)*Iy(a,0,0)*Iz(a,1,0);
q4 += Ix(a,0,0)*Iy(a,0,1)*Iz(a,0,0);
q5 += Ix(a,1,0)*Iy(a,0,1)*Iz(a,0,0);
q6 += Ix(a,0,0)*Iy(a,1,1)*Iz(a,0,0);
q7 += Ix(a,0,0)*Iy(a,0,1)*Iz(a,1,0);
q8 += Ix(a,0,0)*Iy(a,0,0)*Iz(a,0,1);
q9 += Ix(a,1,0)*Iy(a,0,0)*Iz(a,0,1);
}
这是一段普通的C++代码。
以%开头的行被cheetah预处理器解释为python语句。///是cheetah注释。默认使用#作为python语句,但我更改了它们以避免与C预处理指令冲突。以%end
结束python块。以$开头的C++代码中的变量将被替换为python变量。
您需要使用boost预处理器的示例吗?