DEV/C C++
함수 포인터 예시
F.R.I.D.A.Y.
2021. 12. 19. 02:15
반응형
함수 포인터 예시
사용자로부터 입력을 받는 프로그램이 있다고 하자. 그럼 해당 프로그램은 입력으로 들어온 값에 따라 다른 명령을 수행하도록 구성해야한다. 즉, 분기 구문[# 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
반응형