C++ 二元对折
示例
二元褶皱基本上是一元褶皱,带有一个额外的论点。
有两种二进制折叠:
BinaryLeftFold--(valueop...oppack)扩展如下:
(((ValueopPack1)opPack2)op...)opPackN
二进制右折(packop...opvalue)-扩展如下:
Pack1op(...op(Pack(N-1)op(PackNopValue)))
这是一个例子:
template<typename... Ts>
int removeFrom(int num, Ts... args)
{
return (num - ... - args); //二进制左折
//请注意,不能使用二进制右折
//由于运算符缺乏关联性-
}
int result = removeFrom(1000, 5, 10, 15); //结果为1000-5-10-15=970