자바 같은 애들은 Comparable 같은 거 implements 시키고 compareTo 같은 거 재정의해주면 라이브러리에 있는 정렬 메소드 같은 거 바로 쓸 수 있잖아
근데 C++도 연산자 오버로딩 해주면 똑같이 std::sort 같은 거 바로 쓸 수 있단 말임?
문제는 C++은 여러 가지 종류의 함수 정의가 있을 수 있다는 건데 가령,
bool operator<(foo_t other);
bool operator<(foo_t& other);
bool operator<(const foo_t& other);
bool operatro|<(const foo_t& other) const;
얘네는 다 다른 함수가 되버리자너
이중에서 제일 마지막 걸 오버로딩해야 std::sort가 제대로 되던데 이거 뭐가 기준인 거임?
std::sort는 제일 마지막 걸 오버로딩해야 한다 쳐도 표준 라이브러리의 다른 함수는 또 다른 연산자를 오버로딩해야 할 수 있잖아
const나 & 같은 거 붙이는 기준이 뭐야?
파라미터에 붙는 const랑 &, 함수에 붙는 const랑 noexcept 같은 거 생각하면 가능한 조합이 꽤 될 거 같은데
std sort에서 comparator 시그니처를 보셈
아 아니다 근데 < 오버로딩 뭘 해도 sort 똑같이 되지않나
const 빼면 안 되더
While the signature does not need to have const&, the function must not modify the objects passed to it 인거 봐서 sort 내부 구현이 const겠네 그래서 const 멤버함수가 필요한듯
https://en.cppreference.com/w/cpp/named_req/Compare
- dc App
자바처럼 이 클래스는 명시적으로 Comparable이야 이런 게 아니라 그냥 이거 만족하면 됨 이거네
자바는 Comparable 구현해서 compareTo만 재정의해주면 오름차순이든 내림차순이든 다 되는데 C++는 < 따로 > 따로 해줘야 하네
Concept Constraint까지 그모양이라 어차피 아직 현직도 아니겠다 러스트나 파고있음 - dc App
spaceship operator <=> 쓰면 되지 않나?
기준이 뭐냐면 걍 그렇게 하라고 만들어 놓은 거임 std라이브러리는 위대하신 표준위원회님들께서 만들어 놓으신 거라 좀 다르게 접근해야한다 - dc App