구조화 된 바인딩으로 std :: ignore?
전주곡:
std::tuple<int, int, int> f();
std::tuple<int, int, float, int> g();
C ++ 1z는 구조화 된 바인딩에 대한 구문을 도입하여
int a, b, c;
std::tie(a, b, c) = f();
뭔가
auto [a, b, c] = f();
그러나 특정 구성 요소를 무시 std::tie하도록 지정할 수도 있습니다 std::ignore. 예 :
std::tie(a, b, std::ignore, c) = g();
새로운 구조화 된 바인딩 구문을 사용하여 유사한 작업을 수행 할 수 있습니까? 어떻게 작동할까요?
구조화 된 바인딩 제안에는 질문에 답변하는 전용 섹션이 포함되어 있습니다 ( P0144R2 ).
3.8 구성 요소를 명시 적으로 무시하는 방법이 있어야합니까?
동기는 사용되지 않는 이름에 대한 컴파일러 경고를 침묵시키는 것입니다. 우리는 대답이“아직 아님”이어야한다고 생각합니다. 이것은 유스 케이스에 의해 동기가 부여되지 않으며 (컴파일러 경고를 침묵시키는 것은 동기가되지만 그 자체로는 유스 케이스가 아닙니다), 이것이 빠져야하는보다 일반적인 패턴 매칭 제안의 맥락에서 이것을 다시 검토 할 수있을 때까지 남겨 두는 것이 가장 좋습니다. 특별한 경우로.
대칭은
std::tie다음과 같은 것을 사용 하는 것이 좋습니다std::ignore.tuple<T1,T2,T3> f(); auto [x, std::ignore, z] = f(); // NOT proposed: ignore second element그러나 이것은 어색하다.
언어 패턴 매칭을 기대하는 것은 같은 와일드 카드를 제시 할 수
_나*,하지만 우리는 아직 패턴 매칭을 가지고 있지 않기 때문에 우리가 호환 될 것입니다 알고 구문을 선택하는 상조입니다. 이것은 패턴 매칭으로 고려 될 때까지 기다릴 수있는 순수한 확장입니다.
그러나 표준의 작업 초안은 현재 관련 국가 기관 (NB)에 의해 수정되고 있으며이 기능을 요청하는 NB 의견이 있습니다 ( P0488R0 , US100) :
분해 선언은를
std::tie사용하는 것처럼 반환 된 값 중 일부를 버리는 구문을 제공해야 합니다std::ignore.
새로운 구조화 된 바인딩 구문을 사용하여 유사한 작업을 수행 할 수 있습니까?
아니요. 나중에 언급되지 않는 변수 이름 만 구성하면됩니다.
참고 URL : https://stackoverflow.com/questions/40673080/stdignore-with-structured-bindings
'Program Club' 카테고리의 다른 글
| _BSMachError XCode 7 베타 (0) | 2020.12.09 |
|---|---|
| Angular ui-router : ui-views vs 디렉티브? (0) | 2020.12.09 |
| Google 'Omaha'(Chrome 용 자동 업데이트 엔진)의 경험은 어떻습니까? (0) | 2020.12.09 |
| 높이 : 0 패딩을 숨기지 않는 이유 (0) | 2020.12.09 |
| DLL 등록은 무엇을합니까? (0) | 2020.12.09 |