C++/C++

[C++] 람다 함수

2023. 2. 17. 14:43

◆람다함수

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

 

◆#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 자료구조
메카인
메카인
메카인
메카인의 지식창고
메카인
전체
오늘
어제
  • 분류 전체보기
    • 코딩 공부
      • TIL(Today I Learn)
      • TIL
      • 백준(C++)
      • Python
      • 알고리즘
      • 프로젝트 회고
    • C++
      • C++
      • C++ STL
      • C,C++ mCoding yotube
    • 게임개발
      • 언데드서바이벌_골드메탈_클론코딩
      • 3D_골드메탈_클론코딩
      • 유니티_문제해결
      • 게임 수학
    • Unreal 공부
      • UE5 GameDev
      • Unreal Engine 4 C++ The Ult..
    • 교재 문제 풀이
      • 운영체제
    • 정보처리기사
      • 정처기 요약
      • 정처기 오답노트
    • 학교수업
      • 데이터베이스
      • 프로그래밍 언어론
      • 리눅스 시스템
      • 네트워크
    • 일상
      • 주식
      • 독서
    • (비공개 전용)
      • memory
      • Build
      • OOP
      • Smart Pointer
      • lamda
      • 게임 수학
      • 모던 C++
      • 모던 C++ STL
      • 모던 C++ Concurrency, Paralle..

블로그 메뉴

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

공지사항

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

인기 글

태그

최근 댓글

최근 글

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.