a的类型是什么?
What is the type of a lambda?
我见过这样的代码:
std::sort(x, x + N,
// Lambda expression begins
[](float a, float b) {
return std::abs(a) < std::abs(b);
});
显然std::sort
的第三个参数是一个可以容纳lambda的类型。但是这种类型是什么呢?std::sort
超负荷,我无法破译。
(我正在考虑建立一个函数列表:我正在考虑使用lambdas而不是函数指针,因为后者必须具有大致相同的参数列表)。
我想我可以写
auto letTheComplerSortOutTheType =
[](float a, float b) {
return std::abs(a) < std::abs(b);
});
但是当涉及到使用容器时,这对我没有帮助
lambda的类型是唯一的,编译器知道。在你的代码中,std::sort
是一个函数模板,它的第三个参数是一个模板参数,这是由编译器推导出来的,用于你传递给函数的lambda。
通常你不需要知道lambda的类型,因为它是由编译器为你定义的,如下所示:
//generated by the compiler
struct __unique_lambda_defined_by_compiler //arbitrary ugly name!
{
bool operator()(float a, float b) const {
return std::abs(a) < std::abs(b);
}
};
所以你的代码翻译成这样:
//translated by the compiler
std::sort(x, x + N, __unique_lambda_defined_by_compiler());
请注意,如果您希望有一个lambda(和函数指针!)的容器,那么您可以使用std::function
来擦除lambda(和函数指针)的类型,如下所示:
std::vector<std::function<bool(int,int)>> callbacks;
callbacks.push_back([](int, int) { ... }); //the lambda must return bool
callbacks.push_back([](int, int) { ... });
callbacks.push_back([](int, int) { ... });
bool compare(int,int) { ... }
callbacks.push_back(compare); //store normal function as well!
相关文章:
- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 这在C++是什么类型的错误?
- int(int)& 或 int(int) const &是什么类型?
- 我如何找出3D容器的元素是什么类型
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 这个 lambda 的参数是什么类型?
- 转换逻辑目标是什么类型
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- 这是什么类型的行为
- 给定以下内容,"function"是什么类型?
- C++:文本文件中的数据是什么类型的
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
- C++中的 decltype(this) 是什么类型
- 如何知道模板<类型名称类型>是什么类型?
- 内置数组的大小是什么类型?
- c++ 11中的std::chrono::high_resolution_clock::now()是什么类型?
- 在Microsoft Visual C++中,光线跟踪器应该是什么类型的项目
- 如何为delete编写一个C包装器,既快速又释放给定的任何类型,而不告诉它是什么类型
- 如何编写一个函数,无论数组是什么类型都输出它