如何在C++中减少TMP和宏预处理器元编程的编译时间?
How can I decrease compile time of TMP & macro preprocessor metaprogramming in C++?
有什么技巧可以处理大量的元编程代码吗?
我用的是最新版本的clang。但是我可以切换到任何支持c++ 14的(免费的)编译器
或者,有什么技巧可以处理大量的元编程代码?
首选constexpr
-函数而不是tmp -函数,它们通常更快。自c++ 14以来,您还可以在构造函数中使用不仅仅是工作代码的返回语句,这使它们的使用更加方便。一般避免递归。不要太在意算法本身的复杂度,只要它编译得快就行。(在TMP代码中,获得更好的复杂度类可能会导致更慢的编译)。
不要像这样在可变模板中使用递归:
template< typename First, typename ... Tail >
struct A : A<Tail...>
它们创建了二次的时间复杂度,因为编译器必须在每一步中创建单独的参数列表!这是显著可测量的。尝试将递归委托给程序中的一个点,最好的方法是将其委托给std::make_index_sequence
,然后将所有内容推导到该点。
不要使用Boost。生成许多处理案例的部分/显式专门化。这没有用。200个显式的专门化只会让情况变得更糟,因为编译器必须在专门化中搜索(在主模板旁边),并寻找第一个也是最专门化的匹配
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- 所有结构成员的预处理器批处理
- 当头文件被预处理时是否有一个预处理器选项显示?