相关疑难解决方法(0)

lambdas需要捕获'this'来调用静态成员函数?

对于以下代码:

struct B
{
    void g()
    {
        []() { B::f(); }();
    }

    static void f();
};
Run Code Online (Sandbox Code Playgroud)

g ++ 4.6给出错误:

test.cpp:在lambda函数中:
test.cpp:44:21:错误:这个lambda函数没有捕获'this'

(有趣的是,g ++ 4.5编译代码很好).

这是g ++ 4.6中的错误,还是真的有必要捕获'this'参数才能调用静态成员函数?我不明白为什么会这样,我甚至认可了这个电话B::.

c++ lambda c++11

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

从泛型lambda调用`this`成员函数 - clang vs gcc

问题:传递一个普通的lambda (到一个模板函数),它捕获this并调用一个this没有显式的成员函数,this->不能在gcc上编译.如果lambda不是通用的,或者lambda没有被传递给任何其他函数但是就地调用,那么它将编译为withoit this->.在所有情况下,Clang都很酷.

时间又一轮的铛VS GCC.谁是对的?

Wandbox示例


template<typename TF>
void call(TF&& f)
{
    f(1);   
}

struct Example
{        
    void foo(int){ }

    void bar()
    {
        call([this](auto x){ foo(x); });
    }
};

int main()
{
    Example{}.bar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • bar()=call([this](auto x){ foo(x); });
    • clang ++ 3.6+ 编译.
    • g ++ 5.2+ 无法编译.

      错误:无法调用成员函数'void Example :: foo(int)'没有对象调用([this](auto x){foo(x);});`


  • bar()=call([this](auto x){ this->foo(x); });
    • clang ++ 3.6+ 编译. …

c++ lambda this language-lawyer c++14

38
推荐指数
1
解决办法
2455
查看次数

在lambda表达式中调用方法

我想在lambda表达式中调用我的类的方法:

void my_class::my_method(my_obj& obj)
{
}


void my_class::test_lambda()
{ 
   std::list<my_obj> my_list;

   std::for_each(my_list.begin(), my_list.end(), [](my_obj& obj)
   {
      // Here I want to call my_method:
      // my_method(obj);
   });
}
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

c++ lambda c++11

16
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×3

lambda ×3

c++11 ×2

c++14 ×1

language-lawyer ×1

this ×1