> 백엔드 개발 > C++ > C에서 이동 전용 유형을 사용하여 벡터를 초기화하는 방법은 무엇입니까?

C에서 이동 전용 유형을 사용하여 벡터를 초기화하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-23 21:31:11
원래의
1021명이 탐색했습니다.

How to Initialize a Vector with Move-Only Types in C  ?

이동 전용 유형을 사용한 벡터 초기화

G는 벡터 초기화에서 Unique_ptr 객체 복사를 시도하지만 복사 생성자로 인해 실패합니다. 접근이 불가능한 상태. 오류 메시지는 복사할 수 없는 객체를 복사하려고 시도하는 문제를 정확하게 강조합니다.

이동 반복자 활용

이 문제를 해결하려면 이동 반복자를 활용하면 됩니다. 역참조된 요소:

using move_only = std::unique_ptr<int>;
move_only init[] = { move_only(), move_only(), move_only() };
std::vector<move_only> v{std::make_move_iterator(std::begin(init)),
                          std::make_move_iterator(std::end(init))};
로그인 후 복사

도우미 고용 유형

또는 도우미 유형을 활용하여 초기화 시 이동 의미를 얻을 수 있습니다.

template<class T>
struct rref_wrapper
{
    explicit rref_wrapper(T&& v) : _val(std::move(v)) {}
    explicit operator T() const { return T{std::move(_val)}; }
    T&& _val;
};

// Only usable on temporaries
template<class T>
typename std::enable_if<
    !std::is_lvalue_reference<T>::value,
    rref_wrapper<T>
>::type rref(T&& v) {
    return rref_wrapper<T>(std::move(v));
}

std::initializer_list<rref_wrapper<move_only>> il{rref(move_only()),
                                                    rref(move_only()),
                                                    rref(move_only())};
std::vector<move_only> v(il.begin(), il.end());
로그인 후 복사

위 내용은 C에서 이동 전용 유형을 사용하여 벡터를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿