예를 들어 Circle 클래스를 만드는데 반지름만 받는 생성자도 만들고 싶고, 원주만 받는 생성자도 만들고 싶은데 그냥 double 등으로 받으면 둘이 구분이 안가니까
각각에 대해 별도의 타입을 만들고, 그냥 일일히 만들면 비슷한 코드를 계속 만들어야 되니까 래핑용 유틸리티 클래스도 만들고 하던데
이런 짓보다 newWithRadius, newWithDiameter 같은 이름으로 정적 팩토리 메소드를 만드는게 명확하고 효율적 아님?
예를 들어 Circle 클래스를 만드는데 반지름만 받는 생성자도 만들고 싶고, 원주만 받는 생성자도 만들고 싶은데 그냥 double 등으로 받으면 둘이 구분이 안가니까
각각에 대해 별도의 타입을 만들고, 그냥 일일히 만들면 비슷한 코드를 계속 만들어야 되니까 래핑용 유틸리티 클래스도 만들고 하던데
이런 짓보다 newWithRadius, newWithDiameter 같은 이름으로 정적 팩토리 메소드를 만드는게 명확하고 효율적 아님?
지금이야 딱 서클 클래스 만드는데만 쓰지만 저 NamedType 파생 클래스들을 여기저기 쓴다면?
정적 팩도리 메소드만 존나 늘어나면 추상화 관점에서 별로지 생성자는 통일된 인터페이스를 갖는거잖아 - return 0;
딴얘기지만 NamedType에서 T가 레퍼런스로 연역되는 상황일때 오버로딩된 생성자 모호해져서 컴파일 에러날듯
아 연역이 아니라 직접 타입을 넣겠지 암튼
우측 레퍼런스 메소드들을 U = T 템플릿으로 만들고 U가 레퍼런스면 버려지게 SFINAE 처리하면 되겠네
신경 쓸게 끝이 없네 ㄷㄷ 레퍼런스 시불..
여기서 namedtype wrapper를 왜쓰는진 모르겠는데
cpp에서 tag dispatch할때 보통 이렇게씀
https://godbolt.org/z/UoMXx-
이런거 언어차원에서 제공해주면 좋을거같은데 별로 얘기는 없는듯. boost strong typedef 같은식으로
정확히 그 이름으로 있음 - return 0;