TIL::Today I Learn

[TIL] 20230705

madylin 2023. 7. 6. 13:31
반응형

오늘 공부한 내용📓

- 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