二元褶皱基本上是一元褶皱,带有一个额外的论点。
有两种二进制折叠:
Binary Left Fold--(value op ... op pack)扩展如下:
(((Value op Pack1) op Pack2) op ...) op PackN
二进制右折(pack op ... op value)-扩展如下:
Pack1 op (... op (Pack(N-1) op (PackN op Value)))
这是一个例子:
template<typename... Ts> int removeFrom(int num, Ts... args) { return (num - ... - args); //二进制左折 // 请注意,不能使用二进制右折 // 由于运算符缺乏关联性- } int result = removeFrom(1000, 5, 10, 15); //结果为1000-5-10-15 = 970