空参包的特殊情况
回到前面我们需要传入空参时该怎么处理?很简单,我们直接用二元折叠表达式就是设定一个初值即可。
template <typename... Args>
auto getSum(Args... args) {
return (args + ... + 0);
}
int main() {
getSum();
}
那么,是所有一元折叠表达式都不可以传入空参吗?
并非如此,标准规定只有 && || ,这三个运算符是合法操作,并做出了如下规定:
&& 空包的值为
空包的值为
空包的值为
小结
变参模板的出现,极大的提高了编码的编码的便捷性。并对于一些历史遗留问题,如:变参宏难以编写和调试,一些旧库的参数个数限制等等问题,将不复存在。
可能一些朋友对模板元编程并不感兴趣,但是我们目前很多常用的库和特性都依赖于变参模板的技术,如: 等等。相信阅读完本文后,再去查看这些库的源码时能更加如鱼得水。
