問題タブ [perfect-forwarding]
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::forward を呼び出すにはどうすればよいですか?
私はちょうどジェネリック オブジェクト ファクトリを作成し、boost プリプロセッサ メタ ライブラリを使用して可変個引数テンプレートを作成していました (2010 を使用しており、それらをサポートしていません)。私の関数は rval 参照を使用std::forward
して完全な転送を行い、考えさせられました... C++ 0X が出てきて標準コンパイラがあれば、実際の可変個引数テンプレートでこれを行うでしょう。しかし、どうすればstd::forward
引数を要求できますか?
私が考えることができる唯一の方法は、 ...params の手動アンパックを必要とすることであり、私もまだそこにいません。動作するより高速な構文はありますか?
c++ - std::forward を使用する主な目的と、それによって解決される問題は何ですか?
完全転送では、名前付き右辺値参照を名前なし右辺std::forward
値参照に変換するために使用されます。それを行う目的は何ですか?&を左辺値のままにしておくと、呼び出された関数にどのような影響がありますか?t1
t2
inner
t1
t2
c++ - 継承コンストラクターは C++ でどのように役立ちますか?
私が C++ 標準委員会の会議に出席しているとき、彼らは継承コンストラクターを削除することの長所と短所について議論しています。これは、コンパイラ ベンダーがまだそれを実装していないためです (ユーザーが要求していないという意味です)。
継承コンストラクターとは何かを簡単に思い出させてください。
一部のベンダーは、右辺値参照と可変個引数テンプレート (完全な転送コンストラクター) を使用して、継承コンストラクターを不要にする継承クラスで転送コンストラクターを提供することは簡単であると提案しています。
例:
2 つの質問があります。
1) コンストラクターを継承することで大きなメリットが得られるプログラミング経験から、実際の (不自然な) 例を提供できますか?
2)「完全な転送コンストラクター」が適切な代替手段になることを妨げる、考えられる技術的な理由はありますか?
ありがとう!
c++ - std :: forwardがconstexpr-nessを破棄するのはなぜですか?
宣言されていない場合constexpr
、std::forward
引数を転送する関数のconstexpr-nessは破棄されます。constexpr-nessを維持できるように、それ自体が宣言されていないのはなぜですか?std::forward
constexpr
例:(g++スナップショットでテスト済み-2011-02-19)
注:技術的には、std::forward
constexprを作成するのは簡単です。たとえば、次のようになります(gでは)std::forward
に置き換えられていることに注意してください。fix::forward
私の質問は:なぜstd::forward
のように定義されていないのfix::forward
ですか?
注2:この質問は、constexpr std :: tupleに関する他の質問とある程度関連しています。これは、cstrを右辺値で呼び出すことによって作成できない技術的な理由ですが、ここでの質問は明らかに(はるかに)より一般std::forward
的ですconstexpr
。std::tuple
c++ - C ++ 11でのT&&(ダブルアンパサンド)とはどういう意味ですか?
私はC++11の新機能のいくつかを調べてきましたが、気付いたのは、のような変数を宣言する際の2つのアンパサンドですT&& var
。
まず、この獣は何と呼ばれていますか?Googleがこのような句読点の検索を許可してくれることを願っています。
正確にはどういう意味ですか?
一見、ダブルリファレンス(CスタイルのダブルポインタのようにT** var
)のように見えますが、そのユースケースを考えるのに苦労しています。
c++ - 末尾の戻りタイプとしてdecltypeを使用する正しい方法
このフォームの例をよく目にします。
しかし、私はあえてこれがより正しい方法であると言います:
なんで?何よりもまず、この例のdecltypeはリターンタイプを推測するだけでよいので、(t + u)はリターンタイプではなく(std :: forward(t)+ std :: forward(u))、2つのverによって生成される2番目のコードは同一であり、3番目のdecltype(u + t)はより直接的であり、実装の「根性」を引き出すことなく、プログラマーの意図が何であるかを正確に表現します。
このテーマについてどう思いますか?
c++ - 完全転送はどのように機能しますか?
重複の可能性:
forward を使用する利点
完全転送の考え方は、テンプレート内の正確な CV 修飾子を他のテンプレートに転送することです。
ただし、RValue-references 機能を使用するため、名前付き変数にバインドできません。(おもう?)
名前付き変数にバインドできない場合、転送はどのように「完璧」になりますか?
c++11 - const-correctness を使用した可変長 zip 関数の実装
関数を実装しようとしていzip
ます。 zip
のパラメータは eachwrapped<Ti>
で、パラメータごとにTi
異なります。
zip
はこれらwrapped<Ti>
の を取り、wrapped<tuple<T1&,T2&,...TN&>>
、つまりtuple
そのパラメータへの参照のラップを生成します。参照はconst
-ness を保持する必要があります。
zip
これは、一般的には機能しない 1 つのパラメーターを使用した最初の試みです。
の単一バージョンで一般的な可変個のケースを実装する方法はありzip
ますか?
c++ - このコードは合法ですか? (C++0x 移動セマンティクス)
このコードが C++0x で合法であるかどうかについて興味があります。具体的には、関数で宣言されたオブジェクトは、で宣言されmove_it()
たオブジェクトに適切に移動されmain()
ますか?
c++11 - 完全な転送 - それは何ですか?
重複の可能性:
forward を使用する利点
完全転送とは何か説明してもらえますか?