반응형
std::function은 기존의 함수 포인터를 대체하는 키워드로 C++11에서 추가되었으며, 잘 사용하면 짧은 코드로 많은 기능을 구현할 수 있다.
1. 사용법
#include <functional>
std::function< return-type (parameter-type) > var-name = function;
(1) 인자
1-1) return-type : 함수의 실행 결과를 반환할 반환 타입을 지정
1-2) parameter-type
- 함수에서 사용할 인자의 타입을 지정
- 인자가 여러 개일 경우 콤마(,)로 구분
2. 사용 예제 (1)
#include <iostream>
#include <functional>
void simpleFunc()
{
std::cout << "Simple Function" << std::endl;
}
void executeFunc(std::function<void()>& func)
{
func();
}
int main()
{
// 기존 함수로 생성
std::function<void()> func{simpleFunc};
// 람다 함수로 생성
std::function<void()> lambdaFunc{[](){
std::cout << "Simple Lambda Function" << std::endl;
}};
// 함수 실행
func();
lambdaFunc();
// 함수의 인자로 넘겨서 사용
executeFunc(func);
executeFunc(lambdaFunc);
return 0;
}
3. 사용 예제 (2)
#include <iostream>
#include <functional>
std::function<void(unsigned char)> moveLEFT{[](unsigned char key){
std::cout << "[" << key << "] move LEFT" << std::endl;
}};
std::function<void(unsigned char)> moveRIGHT{[](unsigned char key){
std::cout << "[" << key << "] move RIGHT" << std::endl;
}};
std::function<void(unsigned char)> moveUP{[](unsigned char key){
std::cout << "[" << key << "] move UP" << std::endl;
}};
std::function<void(unsigned char)> moveDOWN{[](unsigned char key){
std::cout << "[" << key << "] move DOWN" << std::endl;
}};
void keyHandler(const unsigned char key)
{
switch (key) {
case 'a': return moveLEFT(key);
case 'd': return moveRIGHT(key);
case 'w': return moveUP(key);
case 's': return moveDOWN(key);
};
}
int main()
{
unsigned char key{};
while (true)
{
std::cout << "Input key: ";
std::cin >> key;
if (key == 'q') break;
keyHandler(key);
}
return 0;
}
반응형
'Programming Language > C++11' 카테고리의 다른 글
[c++11] std::tuple - 두 개 이상의 변수나 객체를 한번에 전달 (0) | 2024.07.02 |
---|---|
[c++11] std::pair - 두 개의 변수나 객체를 한번에 전달 (0) | 2024.07.02 |
[c++11] Lambda Function (람다 함수) - 익명 함수 (10) | 2024.06.26 |
[c++11] Smart Pointer (std::unique_ptr, std::shared_ptr) (21) | 2024.06.24 |
[c++11] std::atomic - 원자성을 보장해야 할 변수 정의 (26) | 2024.06.21 |