Skip to content

Parameter pack

本文中的FP的含义是functional programming;

概述

一、Parameter pack是linear structure

二、对Parameter pack使用FP的方式来进行操作,最最常见的是recursion(参见Recursive-variadic-function)。

三、parameter pack大大提高了C++ generic programming,使得如下成为可能:

1、std::tuple

最能体现parameter pack意义的是: std::tuple

2、variadic class template

参见 Variadic-inheritance章节

3、variadic function template

4、idiom

"parameter pack + forwarding reference" 使得programmer能够写出非常generic的程序。

四、parameter pack大大提高了C++ compile time computation

典型的就是Recursive-variadic-function

五、下面是使用了Parameter pack的一些案例:

1、Variadic-CRTP

2、Variadic-inheritance

3、Variadic-mixin

4、Variadic-template-VS-ellipsis

发展概述

C++11

引入Variadic templates,参见:

1) Wikipedia C++11#Variadic templates

2) cppreference C++11# variadic templates

不足:

不能够直接支持FP apply/reduce,需要通过recursion来实现;

C++14

C++14 新增 generic lambdas 特性,可以将variadic template用于lambda expression,参见C++\Language-reference\Functions\Lambda-expression章节。

C++17

新增特性: fold expression(since C++17),直接支持FP apply/reduce,目的是simplify C++。

参见:

1) Wikipedia C++17#Folding expressions