일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Windows
- VS ERROR
- 문법
- 포인터
- 티스토리
- Visual Studio
- Desktop
- Kotlin
- doit코틀린프로그래밍
- Programming
- CS
- Tips강좌
- 지식나눔강좌
- tipssoft
- c#
- Direct2D
- 알고리즘
- 프로그래밍
- 함수
- Win32
- Javascript
- 배열
- 연산자
- 김성엽
- Tips프로그래밍강좌
- 백준
- 리뷰
- c
- c++
- 이지스퍼블리싱
Archives
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
함수 포인터 예시 본문
반응형
함수 포인터 예시
사용자로부터 입력을 받는 프로그램이 있다고 하자. 그럼 해당 프로그램은 입력으로 들어온 값에 따라 다른 명령을 수행하도록 구성해야한다. 즉, 분기 구문[# if, switch 등]을 이용해야한다.
#include <iostream>
#include <string>
using namespace std;
void doHello(){
cout << "Hello!" << endl;
}
int doWorld(){
cout << "World!" << endl;
}
int main(){
string input{};
while(1){
getline(cin, input);
if(input.compare("exit") == 0){
break;
}else if(input.compare("hello") == 0){
// hello를 입력했을 때 수행할 명령
}else if(input.compare("world") == 0){
// world를 입력했을 때 수행할 명령
}
}
return 0;
}
그런데 만약, 함수 포인터와 map이란 자료구조를 이용하면 어떻게 될까? 아래와 같이 분기 구문을 사용할 필요가 없을 것이다.
#include <iostream>
#include <string>
#include <map>
using namespace std;
void doHello() {
cout << "Hello!" << endl;
}
void doWorld() {
cout << "World!" << endl;
}
int main() {
string input{};
map<string, void(*)()> funcMap{};
funcMap.emplace("hello", &doHello);
funcMap.emplace("world", &doWorld);
while (1) {
getline(cin, input);
if (input.compare("exit") == 0) {
break;
}
auto iter = funcMap.find(input);
if (iter != funcMap.end()) (iter->second)();
}
return 0;
}
명령과 연결된 함수가 있는지만 판단하고, 곧바로 실행해버리면 되기 때문에.. 물론 현재는 map을 사용해서 검색 시간이 크겠지만, 함수 포인터를 어디에 사용할 수 있는가를 보여주는 예제이므로..
728x90
반응형
'DEV > C C++' 카테고리의 다른 글
exe 파일 아이콘 변경 (1) | 2022.07.12 |
---|---|
C++ 레퍼런스 타입 (0) | 2021.10.07 |
printf 이진수 출력(사용자 지정 서식지정자 구현) (0) | 2021.09.14 |
다중 모니터 위치 파악하기 (0) | 2021.07.16 |
PC 카카오톡 AD 제거 (0) | 2021.06.25 |
Comments