相关疑难解决方法(0)

如何给lambda一个持续时间与lambda一样长的内部值?

我想在lambda中修改一个变量而不影响封闭范围.表现得像这样的东西:

std::vector vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
{
  auto sum = 0;
  std::for_each(vec.begin(), vec.end(), [sum](int value) mutable
  {
    sum += value;
    std::cout << "Sum is up to: " << sum << '/n';
  });
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够在不声明sumlambda之外的变量的情况下完成它.像这样的东西:

std::vector vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

std::for_each(vec.begin(), vec.end(), [auto sum = 0](int value) mutable
{
  sum += value;
  std::cout << "Sum is up to: " …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 c++14

3
推荐指数
1
解决办法
273
查看次数

我可以使用匿名lambdas来保持静态值吗?

我想创建一个我想要超出范围的对象,但是设置对其字段的引用.这种做法有什么好处吗?

A* a;
B* b;
[a, b]
{
   static Loader loader("some", "argument", "the constructor", "takes");
   a = loader.getA();
   b = loader.getB();
}();
Run Code Online (Sandbox Code Playgroud)

匿名lambda是否以其拥有的价值被摧毁?是否有更好的设计模式来实现同样的目标?

好吧,这似乎是一个很好的方法.我的问题仍然是,如果匿名lambda在解析时被破坏(并且使用它拥有的静态变量).

c++ lambda singleton static c++17

2
推荐指数
1
解决办法
73
查看次数

针对c ++ 11的lambda capture初始化器警告

有这样的c ++代码:

auto func = [=, vec1=std::move(vec)]() {
                   printf("%x  %x  %x\n", p,vec1.data(), vec.data());
           };
Run Code Online (Sandbox Code Playgroud)

当我编译它时-std=c++11,编译器打印warning

lambda capture initializers only available with -std=c++14 or -std=gnu++14,

但代码可以正常运行,所以我需要处理它warnning.

c++ c++11 c++14

0
推荐指数
1
解决办法
426
查看次数

标签 统计

c++ ×3

c++11 ×2

c++14 ×2

lambda ×2

c++17 ×1

singleton ×1

static ×1