[C++] 람다 함수

2023. 2. 17. 14:43·C++/C++

◆람다함수

▷람다 함수는 익명 함수라고 불리고 함수를 변수처럼 취급하기 위한 테크닉으로 주로 쓰인다.

 

◆#include <functional>

▷이 헤더가 없어도 람다는 사용할 수 있지만 편리한 std::function을 사용하기 위해 작성합니다.

 

◆lambda 함수의 구조

▷[캡쳐](파라미터)->리턴형식{ ... }

▷캡쳐는 =을 사용하기로 합니다. (전체 레퍼런스 캡쳐)

//foo 뒤의 부분이 람다함수이다.
std::function<void()> foo = [=]() {
	printf("Hellow world");
};

 

◆std::function<T>

▷람다함수는 std::function을 통해 변수처럼 선언할 수 있습니다.

▷함수의 반환값과 파라미터를 T 부분에 <int(int,int)> 와 같이 작성합니다.

std::function<int(int,int)> sum = [=](int value1, int value2) {
	return value1 + value2;
};

//std::function을 auto로 줄일 수 있다.
auto sum = [=](int value1, int value2) {
	return value1 + value2;
};
sum(10,20);

 

◆std::bind

▷기존에 존재하는 함수를 std::function 형태의 클래스 인스턴스로 지정할 수 있게 됩니다.

▷파라미터가 있을 경우 td::placeholders::_1 를 수에 맞게 써주어야합니다.

#include <cstdio>
#include <functional>
#include <string>

int sum(int a, int b) {
	return a + b;
}
int main() {
	//파라미터가 있을 경우 td::placeholders::_1 를 수에 맞게 써주어야함
	auto local_sum = std::bind(sum,std::placeholders::_1, std::placeholders::_2);
	int result = local_sum(10, 20);
	printf("result: %d", result);
}

▷단, 클래스 내무에서는 클래스 정의 앞에 앰퍼센드(&)를 붙여야 하며 인스턴스도 std::bind의 파라미터로 넘겨주어야 합니다.

Tank* tank = new Tank();
auto attack = std::bind(&Tank::attackTo, tank, std::placeholders::_1);
attack("Dragon";

'C++ > C++' 카테고리의 다른 글

5장 반복문과 cin 메모  (0) 2023.07.01
4장 포인터, 배열, 포인터 연산 메모  (0) 2023.06.26
[C++] 파일 입출력  (0) 2023.02.16
[C++] STL 자료구조  (0) 2023.02.16
[C++] STL 핵심, Generic  (0) 2023.02.16
'C++/C++' 카테고리의 다른 글
  • 5장 반복문과 cin 메모
  • 4장 포인터, 배열, 포인터 연산 메모
  • [C++] 파일 입출력
  • [C++] STL 자료구조
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 코딩테스트(C++)
      • TIL(Today I Learn) N
        • TIL N
      • 강의
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • CS
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 기타
        • Python
        • 알고리즘
        • 프로젝트 회고
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[C++] 람다 함수
상단으로

티스토리툴바