|
1
14
我希望使用可变模板/右值引用可以加快编译模板化代码的速度。今天,若我们想编写在编译时执行某些操作的模板代码,我们就滥用了语言的规则。我们创建了数十个重载和模板专门化,以实现我们想要的结果,但不是以告诉编译器我们的意图的方式。因此,编译器在构建时几乎没有快捷方式。看 Motivation for variadic templates
CLang仍在其 early days 但我认为它有很好的机会成为一个伟大的C++编译器。 |
|
|
2
9
我也不是C++语言律师,所以我可能会对一些细节感到困惑。
C++编译器编译模板元程序花费如此长时间的主要原因是模板元程序的指定方式。 它们不是直接指定为您希望编译器在编译时运行的代码。以计算类型列表的长度为例。
这是与使用它的代码分开编译的方式,并通过一些语法暴露给语言,然后编译器将能够非常快速地执行它。 这只是一个简单的递归函数调用。 设计允许这些事情的语言是可能的。大多数这样做的(如lisp)都是动态类型的,但也可以使用静态类型。然而,它不太可能是你在C++中实现的东西。 然而,C++的问题在于,代码的编写方式如下:
为了让编译器“执行”元程序,它必须:
这比简单地运行O(N)递归算法要昂贵得多。
|
|
|
3
7
这 主要问题 您不能(通常)将模板类的定义与其声明分开,并将其放入.cpp文件中。 结果: 每当你包含一个头文件时,你都会包含大量代码,在正常情况下,这些代码会很好地分离成.cpp文件并单独编译。每个编译单元都包含一些头文件,因此,使用模板时,每个编译单元包含 很多 通过所包含的标题,可以查看代码或几乎所有项目。 如果这是你的问题,那么看看这里,一个相关的问题: 它有一个 very good answer 解决那个问题 .
这种技术非常有用,我认为应该将其纳入C++faq中: [35.12] Why can't I separate the definition of my templates class from it's declaration and put it inside a .cpp file? |
|
|
4
4
g++4.5在处理模板方面似乎取得了巨大的进步。以下是两个不可避免的变化。
请参阅 gnu site
|
|
|
5
2
这不会是你想要的答案,但Walter Bright是第一个原生C++编译器的主要开发人员,也是一个优化的C++编译器。毕竟,他编写了自己的编程语言D。它基本上是对C++的改进,可以更好地处理模板。 据我所知,没有任何c++编译器针对模板使用进行了优化。 |
|
|
6
2
这 gold linker 可以帮助将链接时间减少约5倍,从而减少整体编译时间。它特别有用,因为链接不能像编译那样并行化。 (这不是一个直接的答案,但希望这有帮助)。 |
|
|
7
1
尝试 Incredibuild 。它大大缩短了编译/构建时间。
|
|
|
8
0
|
|
|
sungjun cho · 函数模板重叠多个匹配项 1 年前 |
|
|
Amaterastis · 基类接受子类和内部子类的模板参数 1 年前 |
|
|
111111 · 确定作为模板参数传递的函数的参数类型 1 年前 |
|
|
Sam · 在LaTeX中将图像添加到预制的投影仪中 1 年前 |
|
|
user416983 · 模板函数成员作为模板参数 1 年前 |
|
|
PyOPTProblem · c++如何模板化模板参数的部分实例化? 1 年前 |