問題タブ [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 投票する
2 に答える
326 参照

c++ - reference_wrapper の STL コンテナの初期サイズを設定するには?

vectorラップされたいくつかの参照型がありreference_wrapperます。このコンテナーを順不同で埋める必要があるため、コンテナーの初期サイズを設定しようとしています。

これは次のようなエラーでコンパイルに失敗します:

これを機能させるための回避策はありますか、vector<T*>それともこの目的のために を使用する必要がありますか?

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

c++ - std::map で std::reference_wrapper を使用する

maps と reference_wrappers は簡単にできると思っていましたが、奇妙なことにつまずきました。

このコードでは、次のコンパイラ エラーが発生します。

ここで、私は本当に、本当に愚かなことをしているのでしょうか? この小さなコードがすぐに機能しないのはなぜですか?

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

c++ - 私のbad_allocはどこから来たのですか?

私はこのコードを持っています。タイプ scoresのフィールドですHiscoreTablestd::vector<reference_wrapper<Record>>

やろうとするとfor(reference_wrapper<Record> r : scores) cout << r.get() << endl;、bad_alloc がスローされます。rが aではなく aRecord&であるためreference_wrapper<Record>、a を割り当てることができないためRecordですか? そんなこと許してやり過ぎだと思っreference_wrapper<Record>::operator=た?

編集:印刷ループが配置されていたデストラクタの問題であることがわかりました。ある時点で、値によって HiscoreTable をヘルパー関数に渡し、ヘルパー関数の最後で破棄されたときに、呼び出しサイトの HiscoreTable を無効にしました。印刷によって参照が壊れる理由はわかりませんが、それが起こったことだと思います。

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

c++ - MS Visual Studio 2013 の std::reference_wrapper

次のようなコードをコンパイルしようとしました:

しかし、なぜコンパイルされないのかわかりません。同じコードが MS Visual Studio 2012 で正常にコンパイルされたと確信していますが、Visual Studio 2013 では次のコンパイル エラーが報告されます。

クラスにコピー、移動、代入演算子を追加しようとしましたが、このエラーを取り除くことができませんでした。このエラーが参照している削除された機能を正確に知るにはどうすればよいですか?

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

c++ - std::reference_wrapper の問題

この問題は、次のコードで明確になります。

std::vector<int> a, b;の代わりにコメントを使用するとint a = 0, b = 0;、コードは GCC 5.1、clang 3.6、または MSVC'13 のいずれでもコンパイルされません。私の意見でstd::reference_wrapper<std::vector<int>>は、 は LessThanComparable に暗黙的に変換可能std::vector<int>&であるため、LessThanComparable 自体である必要があります。誰かが私にこれを説明できますか?

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

c++ - 標準コンテナーが非テンプレート Koenig 演算子の代わりに関数テンプレートを使用する理由

この質問は、 Issue with std::reference_wrapper に触発されています。たとえば、operator<forとしましょうstd::vector。関数テンプレートとして次のように定義されています

その結果、関数引数から対応する関数パラメーターの型への暗黙的な変換は拒否されます (基本的にはテンプレートの性質のため)。これにより、 の有用性と利便性が大幅に低下しstd::reference_wrapperます。たとえば、std::sortonは使用できませんstd::vector<std::reference_wrapper<std::vector<int>>>

一方、すべての問題は、operator<が次のような非テンプレート Koenig 演算子として定義されている場合にのみ解決されます。

なぜ標準ライブラリがこれではなく前者のアプローチを採用したのだろうか?

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

serialization - ブーストでクラスのシリアル化を抽象化するための reference_wrapper

抽象クラスの Boost ベクター (またはその他のコンテナー) でシリアル化する必要があります。抽象クラスのベクトルを直接作成することはできないため、この抽象クラスへの reference_wrapper のベクトルを作成しました。

しかし、Boost std::reference_wrapper で抽象クラスにシリアル化する方法は? 直接実行しようとすると、reference_wrapper のデフォルト コンストラクターにアクセスできないというエラーが表示されます。

前もって感謝します。