暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

巧用C++17的fold expression

purecpp 2020-05-14
886

c++17的fold expression让我们处理变参更简单,代码也会变得更加简洁,比如我们要打印所有参数:

template<typename... Args>
void print(Args... args) {
((std::cout << args << ' '), ...);
std::cout << "\n";
}

print("a", "b", "c");
//将输出a b c

复制

这很简单,如果我们想从右边而不是左边开始打印这些参数该怎么办?对于fold expression来说这很简单:

template<typename... Args>
void print(Args... args) {
int dummy;
((std::cout << args << ' ', dummy) = ... = 0);
std::cout << "\n";
}
print("a", "b", "c");
//将输出c b a

复制

是不是有点神奇!稍微解释一下这个反向打印参数的代码,经过fold expression展开后是这样的:

(f(a, dummy)=f(b, dummy)=f(c, dummy))
复制

这个表达式会先从最右边算起,从而实现了反向打印参数。C++17对 x = y;的计算顺序做了保证,即先计算(y),再计算(x), 最后计算x = y;

有趣的Modern C++, have fun!



    出自:purecpp 欢迎关注微信公众号: purecpp

    地址: www.purecpp.org

    转载请注明出处!

文章转载自purecpp,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论