C 14 中的泛型 Lambda
在 C 14 中,泛型 lambda 允许使用 auto 作为参数类型定义 lambda,从而启用类型泛型行为。了解它们的工作原理有助于了解其底层机制。
模板化调用运算符
通用 lambda 使用模板化调用运算符而不是非模板定义闭包类型像 C 11 lambda 一样。这意味着当 auto 出现在参数列表中时,编译器会为调用运算符创建一个函数模板。
示例:
auto glambda = [](auto a) { return a; };
上面的 lambda 创建一个以下类型的实例:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
类型擦除与模板多态性
泛型 lambda 更接近 Java 的泛型,后者采用类型擦除。与生成具有不同类型的多个函数的 C 模板不同,泛型 lambda 使用类型擦除调用运算符创建单个函数。
类型参数列表
泛型 lambda调用运算符模板包含参数声明中每次出现 auto 的模板参数列表。每个模板参数的类型对应于相应变量的类型。
结论:
C 14 中的泛型 lambda 通过定义 lambda 表达式来实现类型泛型编程模板化的呼叫操作员。这提供了一种简洁的方法来创建类似于 Java 泛型的类型擦除函数。
以上是C 14 泛型 Lambda 如何实现类型泛型行为?的详细内容。更多信息请关注PHP中文网其他相关文章!