問題タブ [template-argument-deduction]
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++ - make_pairはどのように型を暗黙的に推測しますか?
make_pair
タイプを推測することはよく知られています。それが存在し、便利な理由です。次の例を参照してください。
ここで、上記の行で控除がいつ行われるかを正確に理解したいと思います。
ペアを作成し、それを割り当てている間、暗黙的にとにキャストdouble
しますか?int
char
int
c++ - 「C++テンプレート-完全ガイド」という本には矛盾があるようです。
「C++テンプレート-完全ガイド」という本のセクション2.4 Overloading Function Templates
には、次の例があります。
ただし、付録BのB.2簡略化された過負荷解決では、著者は次のように述べています。
過負荷の解決は、テンプレートの引数の推定後に発生することに注意してください...(2)
によると(2)
、引数の演繹によって::max(7,42)
呼び出す必要があります。max<int>
c++ - 可変個引数テンプレート連結の推定
質問は簡単です。標準に従って、コンパイラはテンプレートの連結を推測できるはずですか?
例:
コンパイルprint_function
は、引数と明示的なテンプレートが与えられた場合、関数が渡されても問題ないと判断できるはずですか?
続きを見る; 前の質問
c++ - C++11 でテンプレート引数の型推定が失敗する
C++(11) の使用方法を理解しようとしています<type_traits>
。
これが私の簡単なテストプログラムです
GCC 4.8.1 でコンパイルすると、次のエラーが発生します。
GCC がテンプレート パラメータを推測できない理由がわかりませんU
。私のコードに欠落している情報は誰でも知っています。つまり、最初の引数として符号なし整数型を受け取り、2 番目の引数として符号付き整数型を取る C++11 でプログラムを作成する方法です。
c++ - C++ テンプレート コンストラクタ エラー
もっとテンプレート化された問題... 私は C++ が大好きですが、時々嫌いです。
コンパイラがここで不平を言っている理由と、それに対して何ができるかわかりません。
ここで何が起こっているのですか?
MSVC2008を使用しています。
c++ - テンプレート パラメーター推定に 1 つの引数を使用しますか?
テンプレート関数があるとしましょうassign()
。ポインターと値を取り、その値をポインターのターゲットに割り当てます。
この場合、私は常にT
最初の引数から推測されたいと思っていますが、これをうまく表現できていないようです。2
のタイプは ですint
。
assign()
2 番目の引数がテンプレート パラメーターの推論に参加しないように宣言できる方法はありますか?
c++ - ブレース付きイニシャライザで auto とテンプレートの型推定が異なるのはなぜですか?
ブレース付きイニシャライザを指定するauto
と、 の型が推定されますがstd::initializer_list
、テンプレート型の推定は失敗することを理解しています。
これが C++11 標準のどこで指定されているかさえ知っています: 14.8.2.5/5 箇条書き 5:
[プログラムにある場合、推定されないコンテキストです] 関連する引数がイニシャライザ リスト (8.5.4) であるが、パラメータに std::initializer_list またはおそらく cv 修飾された std::initializer_list への参照がない関数パラメータタイプ。【例:
テンプレート void g(T);
g({1,2,3}); // エラー: T の引数が推定されません
—<em>例の終了]
私が知らない、または理解していないのは、型推論の動作にこの違いが存在する理由です。C++14 CD の仕様は C++11 と同じであるため、おそらく標準化委員会は C++11 の動作を欠陥とは見なしていません。
auto
ブレース付きイニシャライザの型を推測する理由を知っている人はいますが、テンプレートは許可されていませんか? 「これが理由かもしれない」という形式の憶測的な説明は興味深いものですが、私は、標準がそのように書かれた理由を知っている人々からの説明に特に興味があります。
c++ - 関数ポインタ テンプレート パラメータの値を推測する方法はありますか?
C++ では、非型のテンプレート パラメーターをポインター (関数ポインター、型など) にすることができます。最近、これが何に役立つかについて質問しました。これは、回答の 1 つに対するフォローアップです。
問題の関数ポインタである関数引数から、関数ポインタ テンプレート パラメータの値を推測することは可能ですか? 例えば:
この控除を実現する方法はありますか?関数引数がコンパイル時にコード内の関数に解決できる限り、コンパイラの実装者の観点からは技術的に可能と思われます。
この背後にある動機について疑問がある場合は、この回答の下のコメント、特に実装の最適化の可能性を参照してくださいstd::bind()
。
編集: のように、関数の引数を削除してテンプレートの引数を使用するだけでよいことがわかりましたtempl<func>()
。関数引数を追加した唯一の目的は、テンプレート引数を渡す必要がないようにすることでした。
私が本当に欲しいのは、次のように関数ポインターの型も推測することだと思います。
そして、呼び出すことができます
また
関数ポインターの単一の言及から型と値の両方を推定します。
それが今より理にかなっていることを願っています。