問題タブ [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 に答える
839 参照

c++ - std::reference_wrapper よりも優れた C++ 参照をエミュレートする型

私は、C++ 参照のように動作するクラスを設計していますが、いくつかの余分な機能 (簿記) を行います。

std::reference_wrapper<T>最初は良いモデルだと思いました。しかし、しばらくしてstd::reference_wrapper<T>、割り当てが内部ポインターを再バインドするため、原則としても C++ 参照として動作しないことに気付きました。

もちろん、自分のクラスの動作を変更することはできますが (再バインドしないように)、参照をエミュレートするクラスが既に存在する可能性があります。たとえば、「std::real_reference<T>」のようなもの。

参照をより厳密にエミュレートするクラス (標準かどうか) はありますか?

これも役立つと思います。たとえば、多くの場所で std::vector<std::reference_wrapper<T>>の代替として提示されているstd::vector<T&>ことがわかりますが、セマンティクスは異なりますが、いくつかの変更で実現できるため、これは誤解を招く可能性がありますstd::vector<std::real_reference<T>>


「完璧な」参照ラッパーが可能であれば、参照はポインターで実装でき、必要はなく、すべての点でまったく同じようにT& 機能するライブラリ機能が必要になるだけだと思います....reference<T>T&

...つまり、言語を使用すると、型に属性を「オーバーロード」して&、言語参照の代わりにカスタム型を生成できることを意味します。たとえばusing mytype& = custom_reference_emulator_of_mytype

0 投票する
2 に答える
677 参照

c++ - std::vector の変換方法> std::vector へ

ローカルがあり、その要素の実際のコピー(つまり)std::vector<std::reference_wrapper<T> >を返したいと考えています。ループよりも良い方法はありますか?std::vector<T>

例:

0 投票する
0 に答える
485 参照

c++ - これは reference_wrapper の有効な使い方ですか?

私が理解していることから、C++ テンプレート クラスreference_wrapperは、通常の参照に対するコピー コンストラクターと代入演算子を本質的に提供するため、コンテナーとタプルの参照に役立ちます。つまり、null を許可しないポインターのように思えます。

その理解に基づいて、std::coutデフォルトで文字列を出力するクラスを実装しようとしましたが、ユーザーはそれをファイルでオーバーライドできます。これは、実際のプログラムではおそらく役に立ちません。ここでは例として使用します。最新の C++ での演習として、new/delete の使用を避け、RAII 機能に依存したいと考えました。クラスは次のようになります。

reference_wrapperすべてが期待どおりに機能しますが、これは私がオンラインで見つけた例とはまったく異なる使用例です。これは の有効な使用と見なされますreference_wrapperか? 自動リソース管理や RAII などの最新の C++ 機能を使用するより良い代替手段はありますか?

0 投票する
2 に答える
1543 参照

c++ - reference_wrapper のベクトルをソートできないのはなぜですか?

の並べ替えられたビューがstd::vector<std::chrono::milliseconds>必要ですが、元のコンテナーを変更したくありません。std::reference_wrapperこれには完璧なようで、整数のベクトルに対してはうまく機能します。

この小さな例を作成しました:

これにより、期待される出力が生成されます(ただし、sorted_durationsコメントアウトされているため、もちろんソートされていません):

ご覧のとおり、整数の元のベクトルは、numbers実行された並べ替え操作によって変更されません。sorted_numbersこれは、まさに私がsorted_durationsベクトルにも望んでいることです。しかし、その行のコメントを外すと、コンパイラは私に非常に腹を立て、それが何を伝えようとしているのか理解できないことを認めなければなりません。私のコンパイラは clang++ バージョン 3.8 で、サンプル プログラムを次のようにビルドします。

p>

そして、ここに私が得るエラー出力があります:

実際にはもう少し長く続きますが、stackoverflow ではエラーの 55000 文字すべてを投稿できません。

私が間違っていること、またはこれが単に不可能な理由を誰かに説明してもらえますか (その場合)。

0 投票する
3 に答える
1093 参照

c++ - reference_wrapper オブジェクトのベクトルを予約します。どのように可能ですか?

std::reference_wrapperデフォルトでは構築可能ではありません。したがって、次のいずれも書くことができません。

しかし、驚いたことに、オブジェクトstd::vector::reserveのベクトルのメンバー関数を呼び出して、std::reference_wrapperその容量を効果的に変更できます。

ライブデモ

std::reference_wrapperデフォルトのコンストラクターがないため、これはどのように可能ですか?

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

c++ - std::reference_wrapper の実装

ここの実装を見ながらstd::reference_wrapper

コンストラクターと演算子は明らかですが、この部分は理解できませんでした

誰かが私のためにそれを単純化できますか...いただければ幸いです

編集:そしての有用な例を与えることは素晴らしいことoperator()ですstd::reference_wrapper

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

c++ - reference_wrapper 実装の詳細

このテンプレート化された operator() は、reference_wrapper 実装でどのように機能しますか?

ここに行きます:

それにしても、なぜ operator() が必要なのでしょうか? 使い方?

返される内容「result_of::type」は何ですか?

(ArgTypes && ..) とは??

呼び出す(取得する)???

このコードは別の惑星の C++ のように見えます :)