欢迎光临散文网 会员登陆 & 注册

Godot Source Code Note 4

2023-06-28 23:47 作者:中专人  | 我要投稿

模板参数展开

可变参数模板分为类型模板形参包与函数形参包。

先上一段Godot源码:

可以看到,代码中使用了一种初始化列表展开的方法,本文简要介绍几种类似方法。

C++11之前:

> 递归模板函数

此方法必须要定义一个递归终止函数,很不简洁。

递归函数调用容易引起栈溢出。

C++11:

> 初始化列表展开

这里借助了逗号表达式的特性,括号中用逗号分隔的表达式会以从左往右的顺序执行,最后返回最右边表达式的结果。在(std::cout << args << std::endl, 0)...包展开中,逗号左边的输出语句先被执行,然后逗号右边的0返回作为数组的元素。因此,如果sizeof...(args)为3的话,那么temp数组为{0, 0, 0}。

上面展示的Godot源代码即使用了此方法。

C++17:

> 折叠表达式

相当简洁,但要掌握集中折叠规则。

容易出错。

> constexpr if 编译时条件判断

constexpr if语句使得模板函数在编译期就可以完成条件判断,而不是运行时。

constexpr if语句起到了一个类似条件编译的效果。

挖个坑,以后有机会可以谈谈constexpr。


部分参考《现代C++语言核心特性解析》《现代C++教程》

如侵删。
欢迎评论指正。

Godot Source Code Note 4的评论 (共 条)

分享到微博请遵守国家法律