Home c++ C++ lambda capture

C++ lambda capture

Author

Date

Category

How to capture f?

# include & lt; iostream & gt;
Using Namespace STD;
Class Test
{
  int i = 444;
Public:
  void (* f) (int) = 0;
  Void R ()
  {
    F (i);
  }
};
INT MAIN ()
{
  int f = 3;
  Test T;
  t.f = [& amp; f] (int i) {cout & lt; & lt; i & lt; & lt; ' '& lt; & lt; f;}; ////// !!!!!!!
  T.R ();
  Return 0;
}

Error …

./ playground / file0.cpp: in function 'int Main ()':
./Playground/file0.cppp: CONVERT 'MAIN () :: & lt; lambda (int) & gt;' to 'void (*) (int)' in assignment
  22 | t.f = [& amp; f] (int i) {cout & lt; & lt; i & lt; & lt; ' '& lt; & lt; f;};

Answer 1, Authority 100%

And where did you decide that Lambda has the type void (*) (int) ?! Lambda with capture – this is not a function at all!

Try it.

# include & lt; functional & gt;
Class Test
{
  int i = 444;
Public:
  FUNCTION & LT; Void (int) & gt; f = 0;
  Void R ()
  {
    F (i);
  }
};
INT MAIN ()
{
  int f = 3;
  Test T;
  t.f = [& amp; f] (int i) {cout & lt; & lt; i & lt; & lt; ' '& lt; & lt; f;}; ////// !!!!!!!
  T.R ();
  Return 0;
}

Answer 2, Authority 25%

# include & lt; iostream & gt;
Using Namespace STD;
Class Test
{
  int i = 444;
Public:
  void (* f) (void *) = nullptr;
  Void R ()
  {
    int * h = & amp; i;
    f (h);
  }
};
STRUCT LAMBDA {
  TEMPLATE & LT; TYPENAME TRET, TYPENAME T & GT;
  STATIC TRET LAMBDA_PTR_EXEC (void * data) {
    Return (TRT) (* (T *) Fn & LT; T & GT; ()) (DATA);
  }
  TEMPLATE & LT; TYPENAME TRET = VOID, TYPENAME TFP = TRET (*) (Void *), TypeName T & GT;
  STATIC TFP PTR (T & AMP; T) {
    Fn & lt; T & GT; (& amp; t);
    Return (TFP) Lambda_PTR_EXEC & LT; TRET, T & GT ;;
  }
  TEMPLATE & LT; TYPENAME T & GT;
  Static Void * Fn (void * new_fn = nullptr) {
    Static Void * Fn;
    If (new_fn! = nullptr)
      fn = new_fn;
    Return Fn;
  }
};
INT MAIN ()
{
  int f = 3;
  Test T;
  AUTO B = [& amp; f] (void * i) {cout & lt; & lt; * ((int *) (i)) & lt; & lt; '' & lt; & lt; f; };
  t.f = lambda :: ptr (b); ////// !!!!!!!
  T.R ();
  Return 0;
}

Programmers, Start Your Engines!

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

Recent questions