std:: make_from_tuple
|
헤더 파일에 정의됨
<tuple>
|
||
|
template
<
class
T,
class
Tuple
>
constexpr T make_from_tuple ( Tuple && t ) ; |
(C++17부터)
(C++23까지) |
|
|
template
<
class
T, tuple
-
like Tuple
>
constexpr T make_from_tuple ( Tuple && t ) ; |
(C++23부터) | |
T
타입의 객체를 생성하며, 튜플
t
의 요소들을 생성자 인자로 사용합니다.
다음과 같이 정의된 설명 전용 함수
/*make-from-tuple-impl*/
가 주어졌을 때:
template
<
class
T,
tuple-like
Tuple,
std::
size_t
...
I
>
// C++23 이전에는 Tuple에 제약 조건 없음
constexpr
T
/*make-from-tuple-impl*/
(
Tuple
&&
t,
std::
index_sequence
<
I...
>
)
{
return
T
(
std
::
get
<
I
>
(
std::
forward
<
Tuple
>
(
t
)
)
...
)
;
}
효과는 다음과 동일합니다:
return
/*make-from-tuple-impl*/
<
T
>
(
std::
forward
<
Tuple
>
(
t
)
,
std::
make_index_sequence
<
std::
tuple_size_v
<
std::
remove_reference_t
<
Tuple
>>>
{
}
)
;
.
만약
|
(C++23부터) |
- std:: is_constructible_v < T, decltype ( std :: get < I > ( std:: declval < Tuple > ( ) ) ) ... > 가 false 인 경우,
프로그램이 형식이 잘못되었습니다.
목차 |
매개변수
| t | - |
T
의 생성자에 인수로 사용될 요소들의 튜플
|
반환값
생성된
T
객체 또는 참조.
참고 사항
|
|
(C++23 이전) |
|
|
(C++23 이후) |
보장된 복사 생략
으로 인해,
T
는 이동 가능할 필요가 없습니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_make_from_tuple
|
201606L
|
(C++17) |
std::make_from_tuple
|
예제
#include <iostream> #include <tuple> struct Foo { Foo(int first, float second, int third) { std::cout << first << ", " << second << ", " << third << '\n'; } }; int main() { auto tuple = std::make_tuple(42, 3.14f, 0); std::make_from_tuple<Foo>(std::move(tuple)); }
출력:
42, 3.14, 0
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3528 | C++17 | 1-tuple의 경우 reinterpret_cast 등을 포함하는 캐스트가 허용됨 | 금지됨 |
참고 항목
|
(C++11)
|
인자 타입들로 정의된 타입의
tuple
객체를 생성함
(함수 템플릿) |
|
(C++11)
|
전달 참조
의
tuple
을 생성함
(함수 템플릿) |
|
(C++17)
|
인자들의 튜플로 함수를 호출함
(함수 템플릿) |