람다함수
1) 람다 함수의 필요성
ex)
#include <cstdio>
#include <functional>
int main() {
std::function<void()> foo = [=]() {
printf("Hello World");
};
return 0;
}
2) #include functional

3) Lambda 함수의 구조

예제코드)
#include <cstdio>
#include <functional>
int main() {
int myvalue = 100;
// 함수의 타입을 지정해주는것.
// 파라미터는 void () 안에 입력후 같은 타입을 입력해준다
// std::string<void>(int, float) foo = [=](int value1, float value2) {}
std::function<void()> foo = [=]() {
printf("Hello World, %d", myvalue);
};
myvalue = 200;
foo();
return 0;
}
위에코드가 너무 길어지기 때문에 아래와 같이 바꿀수 있다. (auto로)
예제코드)
#include <cstdio>
#include <functional>
int main() {
int myvalue = 100;
// 함수의 타입을 지정해주는것.
// 파라미터는 void () 안에 입력후 같은 타입을 입력해준다
// std::string<void>(int, float) foo = [=](int value1, float value2) {}
auto foo = [=]() {
printf("Hello World, %d", myvalue);
};
myvalue = 200;
foo();
return 0;
}
4) std::function 의 템플릿 타입

ex)
#include <cstdio>
#include <functional>
int main() {
int myvalue = 100;
// 함수의 타입을 지정해주는것.
// 파라미터는 void () 안에 입력후 같은 타입을 입력해준다
// std::string<void>(int, float) foo = [=](int value1, float value2) {}
auto foo = [=](int value1, int value2) {
return value1 + value2;
};
myvalue = 200;
foo();
return 0;
}
5) std::bind

// std::bind를 이용해 파라미터를 만들땐 꼭 ,로 std::placeholders::_1부터 변수의 개수만큼 맞춰줘야한다.
예제코드)
#include <cstdio>
#include <functional>
#include <string>
void foo() {
printf("Hello World");
}
int sum(int value1, int value2) {
return value1 + value2;
}
int main() {
// std::bind를 이용해 파라미터를 만들땐 꼭 오른쪽에 ,로 std::placeholders::_1부터
// 변수의 개수만큼 맞춰줘야 한다.
auto local_sum = std::bind(sum, std::placeholders::_1, std::placeholders::_2);
int result = local_sum(10, 20);
printf("result : %d", result);
return 0;
}
클래스를 바인딩 할때)
예제코드)
#include <cstdio>
#include <functional>
#include <string>
void foo() {
printf("Hello World");
}
int sum(int value1, int value2) {
return value1 + value2;
}
class Marine{
public:
void attackTo(const char* target) {
printf("마린은 %s 를 공격했다.\n", target);
}
};
int main() {
Marine* m = new Marine();
auto attack = std::bind(&Marine::attackTo, m, std::placeholders::_1);
attack("히드라");
return 0;
}
6) 도대체 이런 일을 왜 해야 할까