반응형
오늘 공부한 내용📓
- C++
개념 공부
if/else 문 사용하지 않고 분기 처리하기
- ex05 문제에서 if/else 문을 사용하지 않고 분기하여, 멤버 함수 포인터 배열을 통해 함수를 실행 시켜야 한다.
- if/else 문을 사용하지 말라는 점이, 분기가 엄청 많아질 경우에는 if/else 문은 관리가 힘드니 사용하지 말라는 것으로 이해하여, 대안인 switch 문은 사용하지 않고 코드를 짜보려고 한다.
- complain 함수의 인자로 level이 들어오면, 그 level 에 맞는 함수를 실행시켜야 하기 때문에, levels 배열을 만들어 find 로 level 을 찾고, 그 인덱스를 사용하여 멤버 함수 포인터 배열에서 함수를 실행시킨다.
void Harl::complain(std::string level)
{
typedef void (Harl::*funcPtr_t)();
funcPtr_t funcPtr[4] = {&Harl::debug, &Harl::info, &Harl::warning, &Harl::error};
std::string levels[4] = {"debug", "info", "warning", "error"};
(this->*funcPtr[levels->find(level)])();
}
- 이렇게 했더니, 유효하지 않는 level 이 들어왔을 때, find 함수에서 std::string::npos를 반환하기 때문에 segfault 에러가 발생한다,, 예외처리를 위해서라도 switch 문을 사용하는게 최선일 것 같다.
제가 공부한 내용을 기록하고 있습니다.
혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!
선한 관심과 도움 감사드립니다😊
반응형
'TIL::Today I Learn' 카테고리의 다른 글
[TIL] 20230708 (0) | 2023.07.18 |
---|---|
[TIL] 20230707 (0) | 2023.07.08 |
[TIL] 20230704 (0) | 2023.07.06 |
[TIL] 20230622 (0) | 2023.06.24 |
[TIL] 20230621 (0) | 2023.06.22 |