구조체를 선언해야합니다.
get<0>(x)
및 get<1>(x)
, 또는 사후 C++ (11)의 get<Foo>(x)
및 get<Bar>(x)
, x.foo
또는 x.bar
이하의 의미 및/또는 관용적이다.
tuple
은 순서에 의해 식별되는 형식이 일 정치 않은 항목에 가장 적합합니다.
pair
은 C++ 11 이전에 작성된 tuple
입니다.
모두 pair
및 tuple
(그리고 array
우리가에있는 동안은), 튜플과 같은 점에서 그들은 std::tuple_size
및 get<N>
을 지원합니다.
std
라이브러리에서 많은 유형이 올바르게 명명 된 필드가있는 구조 대신 pair
을 사용한다는 오류가 발생했습니다. 즉, map
이 struct KV{ Key key; Value value; }
을 사용하면 더 좋았을 것입니다.
이제 일반 쌍으로 KV
에 대한 메타 프로그래밍 지원도 좋을 것입니다. 따라서 tuple_size
및 get<0>
등입니다. 그러나 이름이 지정된 필드를 버리는 것은 일반적으로 좋지 않습니다. 이름에는 힘이 있습니다.
C++ 17의 경우 간단하게 struct
은 "tuple-like"가 아니더라도 구조화 된 바인딩으로 작업하기 시작합니다.
신원이 균일하지 않은 순서로 결정되는 항목이있는 경우 이동 방법은 tuple
입니다. pair
은 거의 레거시 유형입니다. pair
에는 몇 가지 장점이 있지만 tuple
을 암시 적으로 초기화하는 것처럼 개선하기 위해 tuple
을 계속 개선 할 수 있습니다 (tuple
암시 적 초기화).
근년에 적절하게 이름 지어진 멤버가있는 구조체는 멤버가있는'std :: tuple'뿐만 아니라'first'와'second' 멤버가있는'std :: pair '보다 훨씬 뛰어납니다 '<0>()'및'<1>()'을 얻습니다. –
두 값이 관련되어 있으면 전 직원 ID, 직원 이름 다음 구조체 내 의견에 더 좋을 것입니다. – ArmenB
API 디자인의 유스 케이스에 대한 예를 들려 줄 수 있습니까? –