ホームページ > バックエンド開発 > C++ > C で移動のみの型を使用してベクトルを初期化する方法

C で移動のみの型を使用してベクトルを初期化する方法

Patricia Arquette
リリース: 2024-12-23 21:31:11
オリジナル
991 人が閲覧しました

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

移動のみ型の Vector の初期化

G は、Vector の初期化で 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))};
ログイン後にコピー

ヘルパーの使用Type

または、ヘルパー型を利用して、初期化時に移動セマンティクスを実現できます。

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート