C++ 二元对折

示例

二元褶皱基本上是一元褶皱,带有一个额外的论点。

有两种二进制折叠:

  • 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