std::ranges::subrange<I,S,K>::operator PairLike
template< /*different-from*/<subrange> PairLike >
requires /*pair-like-convertible-from*/<PairLike, const I&, const S&>
constexpr operator PairLike() const;
|
(1) | (C++20부터) |
| 도우미 개념 |
||
template< class T >
concept /*pair-like*/ = /* see description */;
|
(2) | (설명 전용*) |
template< class T, class U, class V >
concept /*pair-like-convertible-from*/ = /* see description */;
|
(3) | (설명 전용*) |
subrange을(를) 쌍 유형(pair-like type)으로 변환합니다./*different-from*/의 정의는 different-from 을(를) 참고하십시오.|
다음과 동일합니다: template< class T >
concept /*pair-like*/ =
!std::is_reference_v<T> && requires(T t)
{
typename std::tuple_size<T>::type;
requires std::derived_from<std::tuple_size<T>,
std::integral_constant<std::size_t, 2>>;
typename std::tuple_element_t<0, std::remove_const_t<T>>;
typename std::tuple_element_t<1, std::remove_const_t<T>>;
{ std::get<0>(t) } -> std::convertible_to<
const std::tuple_element_t<0, T>&>;
{ std::get<1>(t) } -> std::convertible_to<
const std::tuple_element_t<1, T>&>;
};
|
(C++23까지) |
|
이 개념은 라이브러리 차원의 설명 전용 개념 pair-like과 동일합니다. |
(C++23부터) |
|
다음과 동일합니다: template< class T, class U, class V >
concept /*pair-like-convertible-from*/ =
!ranges::range<T> && /*pair-like*/<T> &&
std::constructible_from<T, U, V> &&
/*convertible-to-non-slicing*/<U, std::tuple_element_t<0, T>> &&
std::convertible_to<V, std::tuple_element_t<1, T>>;
|
(C++23까지) |
|
다음과 동일합니다: template< class T, class U, class V >
concept /*pair-like-convertible-from*/ =
!ranges::range<T> && !std::is_reference_v<T> && /*pair-like*/<T> &&
std::constructible_from<T, U, V> &&
/*convertible-to-non-slicing*/<U, std::tuple_element_t<0, T>> &&
std::convertible_to<V, std::tuple_element_t<1, T>>;
|
(C++23부터) |
반환값
PairLike
(
begin_
,
end_
)
참고 사항
표준 라이브러리에서 다음 타입들은 pair와 유사합니다:
- std:: pair < T, U >
- std:: tuple < T, U >
- std:: array < T, 2 >
- std :: ranges:: subrange < I, S, K >
|
(C++26부터) |
|
이러한 타입들 중 하나로부터 파생된 프로그램 정의 타입은 다음과 같은 조건을 만족하면 pair-like 타입이 될 수 있습니다:
|
(until C++23) |
subrange
특수화는
range
타입이므로, 이 변환 함수를 통해 변환이 수행되지 않습니다.
std::array
특수화는
range
타입이기 때문에
subrange
로부터 변환될 수 없습니다.
예제
#include <iostream> #include <ranges> #include <string> #include <utility> using striter = std::string::const_iterator; using legacy_strview = std::pair<striter, striter>; void legacy_print(legacy_strview p) { for (; p.first != p.second; ++p.first) std::cout << *p.first << ' '; std::cout << '\n'; } int main() { std::string dat{"ABCDE"}; for (auto v{std::ranges::subrange{dat}}; v; v = {v.begin(), v.end() - 1}) { /*...*/ legacy_print(legacy_strview{v}); } }
출력:
A B C D E A B C D A B C A B A
참고 항목
|
(C++23)
|
타입이
tuple 프로토콜
을 구현했음을 지정함
( std::get , std::tuple_element , std::tuple_size ) ( 설명 전용 개념* ) |