Home >Backend Development >C++ >Do C++ lambda expressions support templates?

Do C++ lambda expressions support templates?

王林
王林Original
2024-04-17 13:09:01418browse

是的,C++ lambda 表达式支持模板,可让你创建根据不同类型参数定制的通用 lambda 表达式:语法:[template-parameter-list](parameters) -> return-type { lambda-body }示例:auto square_root = [](T x) -> T { return std::sqrt(x); }实战案例:创建通用的算法和数据结构,如用于不同类型集合的排序算法

C++ lambda 表达式是否支持模板?

C++ lambda 表达式是否支持模板?

是的,C++ lambda 表达式支持模板。这让你可以创建通用的 lambda 表达式,这些表达式可以根据不同的类型参数进行定制。

语法

要创建模板 lambda 表达式,请使用以下语法:

[template-parameter-list](parameters) -> return-type { lambda-body }

其中:

  • template-parameter-list 是模板参数列表,就像在普通函数或类中一样。
  • parameters 是 lambda 表达式的参数列表,就像在普通 lambda 表达式中一样。
  • return-type 是 lambda 表达式的返回类型,就像在普通 lambda 表达式中一样。
  • lambda-body 是 lambda 表达式的正文,就像在普通 lambda 表达式中一样。

示例

以下示例演示如何使用模板参数创建模板 lambda 表达式:

// 定义一个根据类型参数 T 计算平方根的 lambda 表达式
auto square_root = [](T x) -> T {
  return std::sqrt(x);
};

// 将 lambda 表达式用于不同的类型
double a = square_root(2.0);
int b = square_root(4);

在这个示例中,square_root lambda 表达式是一个模板,它根据参数的类型计算平方根。它可以用于计算不同类型的平方根,就像示例中所示。

实战案例

模板 lambda 表达式可用于创建通用的算法和数据结构。例如,你可以创建一个用于对不同类型的集合排序的通用排序算法:

template <typename T>
void sort(std::vector<T>& vec) {
  std::sort(vec.begin(), vec.end(),
    [](T a, T b) { return a < b; });
}

// 用于排序 int 的示例
std::vector<int> int_vec = {3, 1, 4, 2};
sort(int_vec);

// 用于排序 string 的示例
std::vector<std::string> str_vec = {"b", "a", "d", "c"};
sort(str_vec);

结论

C++ lambda 表达式支持模板,让你可以创建通用 lambda 表达式,这些表达式可以根据不同的类型参数进行定制。这使你可以创建通用的算法和数据结构,它们可以与不同的类型一起使用。

The above is the detailed content of Do C++ lambda expressions support templates?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn