我最近在元编程变得流行的时候广泛使用了C++,我现在才回来.我过去做过一堆脚本化的C++代码生成.虽然我看到元编程功能强大,它是否真正提供了脚本代码生成的任何功能?我看到的一个优点是脚本不是"往返",其中元编程与源代码内联,因此非运行时代码和运行时代码之间总是存在同步性.
你已经得到了几个提到类型安全的答案,这是一个很好的理由 - 但它肯定不是唯一的.使用脚本生成代码的一个大问题是它在整个构建周期中难以分发,并且所有程序员都使用它.也就是说,即使给出了一个工作脚本,使用该脚本的程序员也必须合理地意识到它的存在.必须编写构建周期以了解脚本,并且使用脚本生成的代码进行调试往往也相对困难,因为您调试的代码既不是您或其他任何人实际编写的.脚本生成的代码很少编写,就像普通人写同样的东西一样,使调试变得更加困难.
元编程倾向于集中难度 - 但即使编写起来很困难,使用它通常也很简单.就调试而言,它取决于:模板代码可以编写为在编译时静态检查其参数,并且(至少尝试)在/如果使用不正确时产生有意义的错误消息.当然,有些功能没有,就像某些功能接受它们的输入并尝试使用它们而不检查所提供的输入是否满足其要求.
同时,一旦编写了模板代码,使用它通常非常简单.事实上,由于模板通常必须在标题中,因此复杂的元编程往往是最简单的代码,可以合并到最终产品中.通常你要做的就是包括正确的标题; 您甚至不必为链接器指定库.
这往往更适合程序员之间真正的人才分配.一个小程序员显着优于其他.使用TMP,您有更好的机会让一些非常优秀的程序员编写复杂的TMP代码,并使所有普通程序员的生活变得更加轻松.使用脚本代码生成,您基本上期望所有参与者拥有几乎相同级别的人才.使用该脚本,编写与脚本生成的代码集成的其他代码等等都是同样困难的,因此您基本上需要所有程序员都非常好,并且几乎不能利用一些好的程序程序员让所有人的生活更轻松.