Jackie Lloyd Ответов: 2

Как написать метод, который принимает лямбда-функцию в качестве аргумента, и использовать его?


Я пытаюсь использовать лямбда-функции и борюсь с ними.

Я хочу создать метод, который принимает лямбда-метод в качестве аргумента. Затем я хочу иметь возможность передавать различные лямбда-функции в этот метод, чтобы в разных ситуациях в зависимости от метода использовалась другая формула.

Несмотря на то, что я прочитал множество статей, мне до сих пор не удалось понять, возможно ли это и каким должен быть синтаксис для объявления и передачи лямбда-частей.

Теперь я действительно сыт по горло!

Что я уже пробовал:

В приведенном ниже коде "MyFunction" - это метод, который я хочу принять в качестве аргумента лямбда-метод.

Метод 'CallingFunction' вызывает 'Myfunction' дважды, каждый раз передавая другую формулу в качестве лямбда-метода, так что внутри Myfunction используется другая формула.

Я надеюсь, что вы можете понять синтаксис, который я использовал ниже, чтобы попытаться показать свое намерение.


void MyClass::CallingFunction(int x, double a)
{
   if (x == 0)
   {
      double lambda_function1 (double i, double j, double k) { return i+j*k;};
      MyFunction(a, x, lambda_function1);
   }
   else
   {
      double lambda_function2 (double i, double j, double k) { return i+j+k;};
      MyFunction(a, x, lambda_function2);
   }
}

double MyClass::MyFunction(double a, lambda_function)
{
   double b = 5.0;
   double c = 6.0;
   return lambda_function(a, b, c); 
}

2 Ответов

Рейтинг:
0

Richard MacCutchan

Ваш параметр lambda_function не имеет определения типа, поэтому компилятор не сможет понять, каким он должен быть. Я предполагаю, что это должен быть указатель на функцию, поэтому вам нужно будет объявить его как таковой. В качестве альтернативы вы можете использовать тип функтора STL, как описано в разделе Функциональные объекты в стандартной библиотеке C++ | Microsoft Docs[^]


Jackie Lloyd

Ах, вот где, я думаю, мое замешательство. Изначально я собирался использовать указатели функций. Я не пользовался ими уже много лет, поэтому мне пришлось поискать их. мой коллега рядом со мной спросил, почему я собираюсь использовать что-то столь устаревшее, как указатели функций. Почему бы не использовать лямбда-функции? Но вы говорите, что мой параметр лямбда-функции должен быть указателем функции??? Я думал, что это случай использования указателей функций или лямбда-функций, а не лямбда-функция-это тип указателя функции.

Richard MacCutchan

Видеть Лямбда-выражения в C++[^]