<aside> 🏹 [ 캡처 ] ( 매개변수들 ) { 함수 내용 } ( 람다 사용시 인수 전달 ) ;
</aside>
<aside> 🎋 함수 밖에 있는 데이터를 어떻게 접근하는가?
일반함수말고 람다를 쓰는이유?
→ 일반함수에서는 불가능한 함수 밖의 데이터 접근이 가능해서
// 일반함수
enum
{
CALC_ADD = 0,
CALC_SUB,
CALC_MUL
};
int Calc(int nNumA, int nNumB, int nOperator)
{
int nResult{};
switch (nOperator)
{
case CALC_ADD:
nResult = nNumA + nNumB;
break;
case CALC_SUB:
nResult = nNumA - nNumB;
break;
case CALC_MUL:
nResult = nNumA * nNumB;
break;
}
return nResult;
} // 코드의 유연성이 떨어짐
// 함수 포인터 이용
int CalcLam(int nNumA, int nNumB, int(*Func)(int, int)) // 함수 포인터를 매개변수로 전달
{
return Func(nNumA, nNumB);
}
int Add(int nA, int nB)
{
return nA + nB;
}
// 원하는 기능의 함수만들어서 포인터로 전달
std::cout << CalcLam(1, 2, Add);
// 람다 이용
std::cout << CalcLam(10, 20, [](int a, int b) {return a + b; }) << '\\n';
// 람다로 원하는 함수 만들어서 바로 넣음
<aside> 🕯️ 함수 포인터? → 그냥 함수포인터를 선언해서는 람다식을 저장할 수 없다!!
</aside>
변수에 람다를 넣을 수 있음
함수를 변수처럼 관리 가능
auto lamFunc = []()
{
std::cout << "람다" << '\\n';
};
lamFunc();
람다를 선언하자 마자 사용도 가능 → 바로 (); 로 실행하기
[]()
{
std::cout << "람다하자마자바로" << '\\n';
}();
[](int a)
{
std::cout << "매개변수 : " << a << '\\n';
}(10);
<aside> 🦦 std::function<반환타입 (매개변수자료형~) > 변수명
</aside>
int (*Func2)(int, float) {};
std::function<int(int, float)> Func2 = [&](int a, float b) // function 써서 함수포인터 만들고 람다식 저장함
{
nCnt++;
std::cout << "nCnt : " << nCnt << '\\n';
return a + (int)b;
};