name() 을 auto 로 반환하는건 std::string 을 반환하게 할 수도 있고 const char* 를 반환하게 할 수도 있어서 그런거임?
익명(220.116)2022-07-26 01:20
답글
맞음. string, wstring, const char*, const wchar*
익명(skuld88)2022-07-26 01:28
답글
더 중요한 건, 상속하는 놈의 name 타입을 Shape가 모르기 때문에 저걸 auto로 안하면 컴파일이 안됨.
익명(skuld88)2022-07-26 01:29
답글
근데 그건 뭐 타입하나 정하고 자식에서도 그 타입으로만 변수 만들어서 쓰면되지 않음? 물론 auto 쓰는게 유연해보여서 좋아보이긴하는데
익명(220.116)2022-07-26 01:34
답글
그걸 강제가 가능한 경우에는 그렇게 하는게 더 나은 디자인이고 그게 안되는 경우에는 저렇게밖에 처리 못함. 네임은 대표적으로 그게 안되는 경우임. 유니코드, 로케일, C와의 호환성 이런거ㅜ고려하면 string, wstring, u32string, const char* 등등 다 한 인터페이스로 처리하는게 바람직 하니까
익명(skuld88)2022-07-26 01:37
답글
근데 또 저런식으로 구현하면 님이 말한대로 강제할 수 없는 환경이면 파생클래스 별로 name 타입이 다 다르게 만들어 놓을 수도 있는거 아님?? 그건 좀 거시기한듯.. name() 반환 타입이 애초에 const char* 이런식이면 파생에서 변수를 그 타입에 맞게 만들 수 밖에 없잖아 컴파일되려면 그러면 이건 뭐 선택의 문제정도인듯 보이네
익명(220.116)2022-07-26 01:41
답글
캐릭터 타입이 다 달라서 불가능해. const CharT*로 통일한다 치더라도 const wchar_t*를 어떻게 const char*로 바꿀건데?
익명(skuld88)2022-07-26 07:51
답글
const char* 반환하게 했음 const char* 타입 변수만 만들게 되는거지 const wchat_t* 바뀌는 부분이 없는데? 외부에서 const wchat_t*가 필요한 경우는 그건 뭐 필요한 사람이 알아서 하는거고 그래서 선택의 문제 같다고 했던고
익명(175.223)2022-07-26 10:47
답글
그러면 const wchar_t*를 이름으로 갖는 애들은 Shape를 상속 못하잖아. SOLID 원칙의 O가 'open to extension', 그러니까 확장에 열려 있어야 한다는 거임
익명(skuld88)2022-07-26 10:54
답글
기본적으로 다형성에서 타입을 제한하는건 "그 제한을 안걸면 아예 말이 안될때" 말고는 제한을 안하는게 국룰임.
익명(skuld88)2022-07-26 10:59
답글
그니깐 const char* 한게 그 제한이란거지 당연히 확장성 고려하면 너말이 맞고 동의한다고는 위에도 언급했음. 난 solid니 뭐니 필요에 따라 선택할 수 있어야한다고 봐서 선택의 문제라고했던거임 너한테는 확장성을 고려한 선택 한가지만 있을 수 있지만 나한테는 확장성을 고려하는 선택을 할 수도 아님 제한을 거는 선택을 할 수도 있는거지
난 좆밥이 맞구나
다 좋은데 닉언은 피해야할드
제목 수정
name() 을 auto 로 반환하는건 std::string 을 반환하게 할 수도 있고 const char* 를 반환하게 할 수도 있어서 그런거임?
맞음. string, wstring, const char*, const wchar*
더 중요한 건, 상속하는 놈의 name 타입을 Shape가 모르기 때문에 저걸 auto로 안하면 컴파일이 안됨.
근데 그건 뭐 타입하나 정하고 자식에서도 그 타입으로만 변수 만들어서 쓰면되지 않음? 물론 auto 쓰는게 유연해보여서 좋아보이긴하는데
그걸 강제가 가능한 경우에는 그렇게 하는게 더 나은 디자인이고 그게 안되는 경우에는 저렇게밖에 처리 못함. 네임은 대표적으로 그게 안되는 경우임. 유니코드, 로케일, C와의 호환성 이런거ㅜ고려하면 string, wstring, u32string, const char* 등등 다 한 인터페이스로 처리하는게 바람직 하니까
근데 또 저런식으로 구현하면 님이 말한대로 강제할 수 없는 환경이면 파생클래스 별로 name 타입이 다 다르게 만들어 놓을 수도 있는거 아님?? 그건 좀 거시기한듯.. name() 반환 타입이 애초에 const char* 이런식이면 파생에서 변수를 그 타입에 맞게 만들 수 밖에 없잖아 컴파일되려면 그러면 이건 뭐 선택의 문제정도인듯 보이네
캐릭터 타입이 다 달라서 불가능해. const CharT*로 통일한다 치더라도 const wchar_t*를 어떻게 const char*로 바꿀건데?
const char* 반환하게 했음 const char* 타입 변수만 만들게 되는거지 const wchat_t* 바뀌는 부분이 없는데? 외부에서 const wchat_t*가 필요한 경우는 그건 뭐 필요한 사람이 알아서 하는거고 그래서 선택의 문제 같다고 했던고
그러면 const wchar_t*를 이름으로 갖는 애들은 Shape를 상속 못하잖아. SOLID 원칙의 O가 'open to extension', 그러니까 확장에 열려 있어야 한다는 거임
기본적으로 다형성에서 타입을 제한하는건 "그 제한을 안걸면 아예 말이 안될때" 말고는 제한을 안하는게 국룰임.
그니깐 const char* 한게 그 제한이란거지 당연히 확장성 고려하면 너말이 맞고 동의한다고는 위에도 언급했음. 난 solid니 뭐니 필요에 따라 선택할 수 있어야한다고 봐서 선택의 문제라고했던거임 너한테는 확장성을 고려한 선택 한가지만 있을 수 있지만 나한테는 확장성을 고려하는 선택을 할 수도 아님 제한을 거는 선택을 할 수도 있는거지
crtp는 무적이다 - dc App