함수 포인터와 람다 표현식 모두 함수를 콜백 함수에 인수로 전달할 수 있습니다. 함수 포인터는 함수의 주소를 가리키는 변수를 보유하는 반면, 람다 표현식은 즉시 함수를 정의하는 익명 함수 개체입니다. 실제 예제를 통해 함수 포인터와 람다 표현식을 사용하여 배열 요소를 합하는 방법을 보여줍니다. 이러한 기술은 유연하고 확장 가능한 C++ 코드를 작성하는 데 필수적입니다.
C++ 함수 포인터 및 람다 표현식: 콜백 마법 발견
소개
함수 포인터와 람다 표현식은 C++에서 중요한 역할을 하며, 함수를 매개변수로 콜백 함수에 전달할 수 있습니다. 이 기사에서는 함수 포인터와 람다 표현식을 심층적으로 살펴보고 실제 예제를 통해 실제 사용법을 보여줍니다.
함수 포인터
함수 포인터는 함수의 주소를 담고 있는 변수입니다. 다른 변수와 마찬가지로 함수를 값으로 전달할 수 있습니다. 함수 포인터를 선언하려면 다음 형식을 따르세요.
// 指向具有指定签名的函数的指针 typedef int (*fptr)(int);
lambda 표현식
lambda 표현식은 함수가 필요할 때마다 즉시 함수를 정의할 수 있는 익명 함수 개체입니다. 해당 구문은 다음과 같습니다.
[capture-list](parameter-list) -> return-type { body };
실용 사례
다음은 함수 포인터와 람다 표현식을 사용하여 배열의 요소를 합산하는 방법을 보여주는 실제 사례입니다.
코드 조각 1: 함수 포인터 사용
#include <iostream> // 求和函数 int sum(int a, int b) { return a + b; } // 使用函数指针 using namespace std; int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); // 指向求和函数的函数指针 int (*ptr)(int, int) = ∑ int total = 0; for (int i = 0; i < size; i++) { total += ptr(arr[i], arr[i + 1]); } cout << "Total: " << total << endl; return 0; }
코드 조각 2: 람다 식 사용
#include <iostream> // 使用 lambda 表达式 using namespace std; int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); int total = 0; for (int i = 0; i < size; i++) { total += [](int a, int b) -> int { return a + b; }(arr[i], arr[i + 1]); } cout << "Total: " << total << endl; return 0; }
코드 이해하기
코드 조각 1에서는 함수 포인터ptr
来保存指向求和函数 sum
的地址。我们遍历数组,将每个元素及其后续元素传递给 ptr
。求和函数返回两个元素的总和,将其添加到 total
를 사용합니다.
스니펫 2에서는 람다 표현식을 사용하여 익명 합계 함수를 정의합니다. 함수 포인터와 달리 람다 식은 필요할 때 즉시 함수를 정의합니다. 스니펫 1과 동일한 방식으로 배열을 반복하여 요소를 람다 표현식에 전달하여 합계를 계산합니다.
결론
함수 포인터와 람다 표현식은 함수를 콜백 함수에 전달하는 데 중요합니다. 함수 포인터는 간단한 변수를 통해 함수를 전달하는 메커니즘을 제공하는 반면, 람다 식을 사용하면 익명 함수를 동적으로 정의할 수 있습니다. 이러한 기술을 이해하면 유연하고 확장 가능한 C++ 코드를 작성할 수 있습니다.
위 내용은 C++ 함수 포인터 및 람다 표현식: 콜백의 마법 발견의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!