問題タブ [reference-wrapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
223 参照

c++ - std::ref を機能させるという唯一の目的のための std::reference_wrapper 実装の核心は何ですか?

std::ref/のページの例は、std::crefstd::ref /を使用して、参照によって引数を取得しているように見える方法でstd::cref引数を渡すことを示していますが、実際には値によってすべてを取得します。std::bindstd::bind

std::reference_wrapperその例だけを見ると、の存在について無知である可能性もありstd::ref、リンクされた例で示される動作を許可する関数にすぎません。

それが、質問のタイトルと以下のstd::ref作品の意味です。

ほとんどの楽しみのためにstd::ref、私は自分自身を実装しようとしましたが、これを思いつきました:

でコンパイルしていたため、誤ってCTAD// Ooopsを使用したとマークされた行のどこか。2 つのケースでとに変更することで、これが修正されます。-std=c++17ref_wrapperref_wrapper<T>ref_wrapper<const T>

それから私はのぞき見しました/usr/include/c++/10.2.0/bits/refwrap.h

一方で、私の / の実装は/refの実装にcrefよく似ていることがわかります。std::refstd::cref

一方、std::reference_wrapper約60行の長さです。noexcept、マクロ、copy ctor、copyなどoperator=、たくさんのものがありますget

std::reference_wrapper そのほとんどは をスレーブとしてのみstd::ref使用することには関係ないと思いますが、コンストラクターがユニバーサル参照を取るなど、関連する可能性があるものがあります。

だから私の質問は:私の細い試みに関して、働くstd::reference_wrapperために必要で十分な部分は何ですか?std::ref

std::reference_wrapper on cppreferenceの実装の可能性があることに気付きました(GCC のものよりノイズが少ない)。とはいえ、ここでも理由のわからないところがあり、 などoperator()