F.R.I.D.A.Y.

함수 포인터 예시 본문

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
반응형

'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