Pimpl 관용구 보면서 public 미만은 다 숨기는 기법 보고서 생각난건데
잘하면 멤버 함수도 숨길 수 있고, 상속 구조더라도 써먹을 수 있겠더라고
API화해서 전달하는 일을 많이 하다보니 private 함수나 내부 루틴을 숨기고 전달할 헤더를 깔끔하게 만드는데 좋을것 같아서 생각해 본 것.
스샷같이 구현하는 아이디어 어떻게 생각함?
수행결과는 아래와 같음
m에 대한 깊은 복사까지는 따로 구현 안했는데 필요한 경우 추가해야할 것 같고
건너 호출하는 방식이라 타이핑이 좀 더러운게 단점이지만
외부에 표시할 부분이랑 구현부를 완전 분리해서 헤더 의존도 줄고 유지보수면에선 좀 낫지 않을까 싶은 생각이 드는데
좀 문제될 만한 부분이 있을까?
해당 댓글은 삭제되었습니다.
고마웡
해당 댓글은 삭제되었습니다.
퇴근하면 제대로 읽어볼게 성의답변 ㄱㅅㄱㅅ
해당 댓글은 삭제되었습니다.
근데 하위단에서 protected로 가져가지 않으면 derived에서 m 을 덮어 생성하라는 의미인가? 그럼 base 함수 호출시에 문제가 돼는거 아니야?
아 그리고 별개인데 std::filesystem::path 로 모든 스트링 관리하는거 어떻게 생각함? String wstring보다 오버헤드가 많이 심할까?
다국어 땜에(무슨 파일경로나 메세지를 날릴지 몰라서) wstring 네이티브로 갖고있는게 아무래도 안심이 되서
Wstring으로 안한건 일일히 L"" 리터럴 안붙여도 작동하게 하려고
쏘리. 처음 답변준거 말인데 Getter가(GetM) protected가 될수 없는게 이게 다이나믹 캐스팅이라서 매 상속구조마다 리턴타입을 달리해서 재정의해야하거든. 캐스팅을 하려면 m에 접근해야하니 m이 private가 되는것도 어렵고. m 에 직접 접근하는경우는 getter밖에 없고 나머지는 getter에서 껍데기 wrapping 함수
GetM->publicfunction() 호출로만 쓰일텐데 obj.m = nullptr같은 실수할 여지가 있을까