問題タブ [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.
c++ - std::ref を機能させるという唯一の目的のための std::reference_wrapper 実装の核心は何ですか?
std::ref
/のページの例は、std::cref
std::ref
/を使用して、参照によって引数を取得しているように見える方法でstd::cref
引数を渡すことを示していますが、実際には値によってすべてを取得します。std::bind
std::bind
std::reference_wrapper
その例だけを見ると、の存在について無知である可能性もありstd::ref
、リンクされた例で示される動作を許可する関数にすぎません。
それが、質問のタイトルと以下のstd::ref
作品の意味です。
ほとんどの楽しみのためにstd::ref
、私は自分自身を実装しようとしましたが、これを思いつきました:
でコンパイルしていたため、誤ってCTAD// Ooops
を使用したとマークされた行のどこか。2 つのケースでとに変更することで、これが修正されます。-std=c++17
ref_wrapper
ref_wrapper<T>
ref_wrapper<const T>
それから私はのぞき見しました/usr/include/c++/10.2.0/bits/refwrap.h
。
一方で、私の / の実装は/ref
の実装にcref
よく似ていることがわかります。std::ref
std::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()
。