111得票4回答
C++20引入模板lambda的需求是什么?考虑到C++14已经有了通用lambda。

C++14 引入了通用 lambda,使得编写以下代码成为可能: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); ...

65得票3回答
这个元组创建习惯用法有一个名称吗?

最近在Boost邮件列表上,@LouisDionne发布了一种巧妙的技巧来创建类似于元组的实体。#include <iostream> auto list = [](auto ...xs) { return [=](auto access) { return acces...

57得票3回答
C++ Lambda 如何从上层作用域捕获可变参数包

我正在学习通用lambda,并稍微修改了示例,因此我的lambda应该捕获上一级lambda的可变参数包。因此,基本上作为(auto&&...)给予上层lambda的内容——应该以某种方式被[=]块所捕获。 (完美转发是另一个问题,我很好奇它是否在这里有可能?) #incl...

38得票2回答
C++17中std::visit的示例中关于模板的使用令人困惑

当查看cppreference中的std::visit()页面(https://en.cppreference.com/w/cpp/utility/variant/visit)时,我遇到了一些看不懂的代码... 这是缩写版本:#include <iomanip> #includ...

34得票2回答
为什么允许使用通用lambda,而嵌套具有模板化方法的结构体不允许?

据我所知,通用lambda表达式将转换为本地作用域结构体的对象,该结构体具有模板化的operator()。这使得通用lambda表达式成为一种功能强大且易于使用的工具。另一方面,当一个函数中存在嵌套的结构体,并且该结构体具有模板化成员时,可以创建这样的结构体。 #include <io...

27得票1回答
为什么lambda的auto&参数会选择const重载?

我正在尝试实现一个类来封装任意类型和互斥锁。要访问封装的数据,需要将函数对象作为locked方法的参数传递。然后封装类会将封装的数据作为该函数对象的参数传递。 我希望我的封装类可以处理const和非const,所以我尝试了以下操作: #include <mutex> #incl...

26得票3回答
这个自应用阶乘函数的类型是什么?

我在C++中编写了一个匿名的阶乘函数,并使用g++4.9.2编译了我的代码。它能够正常工作,但是我不知道我的函数的类型。 #include<iostream> #include<functional> using std::function; int main() {...

19得票2回答
一个通用的lambda表达式的operator()模板参数可以明确指定吗? 这是否合法?

以下的C++代码是否符合标准?#include <iostream> int main() { [](auto v){ std::cout << v << std::endl; }.operator()<int>(42); } 使用cl...

17得票3回答
异步无返回值的lambda表达式

快速的谷歌搜索会告诉你,在可能的情况下要避免使用async void myMethod()方法。并且在许多情况下,有方法使其成为可能。我的问题基本上是这个最佳实践的一个分支: 下面的 lambda表达式评估为什么?Task.Run( async ()=> await Task.Dela...

15得票1回答
将转发lambda转换为函数指针

以下是两个可行的方法。我们可以实例化一个转发函数模板,得到一个接受左值参数的函数指针: template <class T> void f(T &&) {} void(*p)(int &) = f; // Cool! 我们也可以将一个不捕获任何值的通...