(참고 : tuple
그리고 tie
Boost 또는 C ++ 11에서 가져올 수 있습니다.)
요소가 두 개인 작은 구조체를 작성할 때 strict-weak-ordering std::pair
과 같이 해당 데이터 유형에 대해 모든 중요한 작업이 이미 수행 되었기 때문에를 선택하는 경향이 있습니다. operator<
.
단점은 거의 쓸모없는 변수 이름입니다. 나 자신이 그 창조하더라도 typedef
, 나는 2 일 후 기억하지 않습니다 first
어떤 second
그들은 동일한 유형의 모두, 특히이었다 정확하게. 중첩 pair
s가 상당히 짜증나 기 때문에 두 개 이상의 구성원의 경우 더욱 악화됩니다 .
다른 옵션은tuple
, Boost 또는 C ++ 11에서 왔지만 실제로 더 멋지고 명확하게 보이지는 않습니다. 그래서 필자는 필요한 비교 연산자를 포함하여 직접 구조체 작성으로 돌아갑니다.
특히는 operator<
매우 번거로울 수 있으므로 다음에 대해 정의 된 작업에 의존하여이 모든 혼란을 피할 수 있다고 생각했습니다 tuple
.
예를 operator<
들어 strict-weak-ordering의 경우 :
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
( tie
수 tuple
의 T&
전달 인자에서 참조.)
편집 : @DeadMG가 개인적으로 상속하라는 제안은 tuple
나쁜 것은 아니지만 몇 가지 단점이 있습니다.
- 운영자가 독립적 인 경우 (아마도 친구 일 수 있음) 공개적으로 상속해야합니다.
- 캐스팅을 사용하면 내 함수 / 연산자 (
operator=
특히)를 쉽게 우회 할 수 있습니다. - 으로
tie
그들이 순서에 대한 문제가되지 않는 경우 솔루션, 나는 특정 회원을 남길 수 있습니다
이 구현에 고려해야 할 단점이 있습니까?