![]() |
1
6
使用模板可以执行以下操作:
|
![]() |
2
8
一个用途是模板参数推导可以用来计算I,省去了程序员的麻烦:
别乱来
我敢肯定,它的最初动机是类模板,比如
|
![]() |
3
3
单独类型的创建实际上是一个有用的idom(google“int-to-type习惯用法”)。但除此之外,模板版本允许编译人员在编译时而不是运行时知道数字的值。这意味着有一组不同的可能的优化是可用的。实际上,可能性是巨大的,这个特性基本上使c++模板本身成为一种完整的计算语言。 对于常见用法的一个基本示例,假设您希望在编译时使具有固定大小的容器为已知。如果没有非类型模板参数,则无法实现此功能。像这样的:
|
![]() |
4
2
这样的构造可以使用的东西是无穷的。一个基本的例子是boost::array,它通过一个非类型模板参数指定它的大小。不可能以任何其他方式(聚合类型、堆栈上的内容)执行相同的操作。 |
![]() |
5
2
区别在于模板版本在编译时得到扩展,因此整数编译成隐式常量;在非模板版本中,在运行时仍然存在整数。在模板版本中,
典型的例子是一个通用向量类(数学向量,而不是
|
|
6
2
使用非类型模板参数,您真的可以做很多事情。一个这样的例子,通常与模板元编程有关(参见Andrei Alexandrescu的关于这个问题的书:“现代C++设计”)是一个模板类,它在编译时计算阶乘。有点像
然后,您可以完全专门化您的阶乘类0,因此它实际上在某个地方结束:
然后,可以使用此类在编译时计算一些阶乘,如下所示:
这也许不是最有用的例子,但你可以理解。 你可以在维基百科上找到这个例子,在那里你也可以阅读更多关于这个主题的内容。 干杯。 |
![]() |
7
1
一个用途是 metaprogramming . 一个例子(不知羞耻地从维基百科上偷走)是一个模板,它在编译时计算一个数字的威力:
|
![]() |
8
0
如果你想为类型定义“常量”,这很有用。。。 例如。。
现在当你声明一个字段的实例时,你可以对它的id进行编码。。。
为什么这有用?考虑第三方使用的协议,例如交换(比如FAST/FIX等) |
![]() |
9
0
举例说明。 目前,我正在研究一个Trie结构(顺便说一句,如果有人知道一个好的实现……)。 Trie基本上是一个N元树,第一级基本上是完整的,然后越深入,越稀疏(这不是结构的适当性,只是大多数字典的短词比长词多得多)。 我正在考虑使用这个模板特性来最小化分配的节点数。以一种非模板化的方式:
使用模板我可以:
省去了编写宏或一遍又一遍地复制代码的枯燥任务。 |
![]() |
TCD · 标准库非类型模板类是否显式实例化? 2 年前 |
![]() |
sovesti · 参数较少的模板函数中的演绎 2 年前 |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 3 年前 |
![]() |
Seymore Glass · 模板不工作的默认参数 3 年前 |
![]() |
Alexander Daum · 模板参数中对模板类型的引用 7 年前 |
![]() |
ledonter · 为什么注入的类名有时不被视为类模板中的模板名? 7 年前 |