如何在C++中减少TMP和宏预处理器元编程的编译时间?

How can I decrease compile time of TMP & macro preprocessor metaprogramming in C++?

本文关键字:处理器 预处理 编程 时间 编译 C++ TMP      更新时间:2023-10-16

有什么技巧可以处理大量的元编程代码吗?

我用的是最新版本的clang。但是我可以切换到任何支持c++ 14的(免费的)编译器

或者,有什么技巧可以处理大量的元编程代码?

首选constexpr -函数而不是tmp -函数,它们通常更快。自c++ 14以来,您还可以在构造函数中使用不仅仅是工作代码的返回语句,这使它们的使用更加方便。一般避免递归。不要太在意算法本身的复杂度,只要它编译得快就行。(在TMP代码中,获得更好的复杂度类可能会导致更慢的编译)。

不要像这样在可变模板中使用递归:

template< typename First, typename ... Tail >
struct A : A<Tail...>

它们创建了二次的时间复杂度,因为编译器必须在每一步中创建单独的参数列表!这是显著可测量的。尝试将递归委托给程序中的一个点,最好的方法是将其委托给std::make_index_sequence,然后将所有内容推导到该点。

不要使用Boost。生成许多处理案例的部分/显式专门化。这没有用。200个显式的专门化只会让情况变得更糟,因为编译器必须在专门化中搜索(在主模板旁边),并寻找第一个也是最专门化的匹配