C++

[C++] 조건문, 스위치문을 줄이기 의한 방법

Guk-blog 2024. 3. 16. 13:47
728x90
반응형

1. Map을 활용한 방법

#include <iostream>
#include <map>
#include <functional>

// 명령을 나타내는 enum 클래스
enum class Command {
    Start,
    Stop,
    Pause,
    Resume
};

// 명령에 따른 함수를 매핑하는 맵
std::map<Command, std::function<void()>> commandMap;

int main() {
    // 각 명령에 대한 함수를 맵에 등록
    commandMap[Command::Start] =  { std::cout << "시작합니다." << std::endl; };
    commandMap[Command::Stop] =  { std::cout << "중지합니다." << std::endl; };
    commandMap[Command::Pause] =  { std::cout << "일시정지합니다." << std::endl; };
    commandMap[Command::Resume] =  { std::cout << "재개합니다." << std::endl; };

    // 사용자로부터 명령 입력 받기
    int commandInput;
    std::cin >> commandInput;
    Command userCommand = static_cast<Command>(commandInput);

    // 맵을 사용하여 해당 명령의 함수 실행
    if (commandMap.find(userCommand) != commandMap.end()) {
        commandMapuserCommand;
    } else {
        std::cout << "알 수 없는 명령입니다." << std::endl;
    }

    return 0;
}


2. 함수 포인터를 활용한 방법

#include <iostream>

// 함수 포인터를 위한 타입 별칭 정의
using FunctionPtr = void (*)();

// 실행할 함수들
void Start() {
    std::cout << "시작합니다." << std::endl;
}

void Stop() {
    std::cout << "중지합니다." << std::endl;
}

void Pause() {
    std::cout << "일시정지합니다." << std::endl;
}

void Resume() {
    std::cout << "재개합니다." << std::endl;
}

// 함수 포인터를 사용하여 함수 실행
void ExecuteCommand(FunctionPtr command) {
    command(); // 함수 포인터를 통해 함수 호출
}

int main() {
    FunctionPtr commands[] = {Start, Stop, Pause, Resume};
    int commandIndex;

    // 사용자로부터 명령 번호 입력 받기
    std::cout << "명령을 선택하세요 (0: 시작, 1: 중지, 2: 일시정지, 3: 재개): ";
    std::cin >> commandIndex;

    // 입력된 번호에 해당하는 명령 실행
    if (commandIndex >= 0 && commandIndex < 4) {
        ExecuteCommand(commands[commandIndex]);
    } else {
        std::cout << "알 수 없는 명령입니다." << std::endl;
    }

    return 0;
}

728x90
반응형

'C++' 카테고리의 다른 글

[C++] 컨텍스트 스위치란  (0) 2024.03.17
[C++] 멀티 스레드, 멀티 프로세스  (1) 2024.03.17
[CPP] 분할 구현  (0) 2024.03.15
[C++] Merger Sort 병합 정렬  (0) 2024.03.15
[C++] Quick Sort 퀵 정렬  (1) 2024.03.15