C++ - STL function, lambda, bind 사용 예
/*
* std_function1.cpp
* Copyright (C) 2014 kaoru <kaoru@bsd>
*/
#include <iostream>
#include <functional>
using namespace std;
struct Foo {
Foo(const int n) : i_(n) {}
void print_add(const int n) const { std::cout << i_ + n<< std::endl; }
int i_;
};
struct PrintFunctor {
// 인수를 표시만 하는 함수오브젝트
void operator()(int i) {
std::cout << i << std::endl;
}
};
void
print_number(const int i)
{
std::cout << i << std::endl;
}
int main(int argc, char const* argv[])
{
// 보통의 함수
std::function< void(int) > f_func = print_number;
f_func(3);
// 람다식
std::function< void(int) > f_lambda = [=](int i) { print_number(i); };
f_lambda(6);
// 바인드
std::function< void() > f_bind = std::bind(print_number, 9);
f_bind();
// 클래스의 멤버 함수
std::function< void(const Foo&, int) > f_member = &Foo::print_add;
Foo foo (1);
f_member(foo, 3); // 1+3 = 4
// 함수 오브젝트
std::function< void(int) > f_func_obj = PrintFunctor();
f_func_obj(11);
return 0;
}
이 글은 2019-06-05에 작성되었습니다.