問題タブ [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++ - SFINAEを理解する
私の知る限り、SFINAE は置換の失敗がコンパイル エラーにはならないことを意味しますが、可能なオーバーロードのリストからプロトタイプを削除するだけです。
私が理解していないこと: なぜこの SFINAE なのか:
しかし、これはそうではありませんか?
私の理解では、根底にあるロジックはここでも同じです。この質問は、この回答へのコメントから生まれました。
c++ - double または complex を返すテンプレート関数から
*
行列クラスの演算子をオーバーロードする関数テンプレートをいくつか作成しています。double
タイプとの行列で多くの作業を行いcomplex<double>
ます。正しい型を返す単一のテンプレート関数を作成することは可能ですか? 例えば:
V
戻り値の型を の自然な結果によって決定したいと思いT*U
ます。これは可能ですか?
編集:
私が尋ねたフォローアップの質問には、ここで適用できる追加情報を提供する回答がありました。
c++ - C++ および標準アルゴリズムのテンプレート
「Effective STL」という本を読んでいるときに、著者は a をどのようcopy_if
に記述できるかの例を示しています。これは、標準アルゴリズムには存在しないためです。著者のバージョンは次のとおりです。
今私の質問は、作者がその方法を次のようにどのように使用できるかです:
私の質問は、テンプレートパラメータがcopy_ifで定義されていないのはなぜですか(3が必要なため)、このように
c++ - 空の山括弧を使用したテンプレート関数呼び出し <>
以下のテンプレートの動作と混同しています。ここでは、空の山括弧 (パラメーターなしのテンプレート) で正常にコンパイルされます。これは、構文的に、 template<> が明示的なテンプレートの特殊化をマークするために予約されているためです。
上記の場合、テンプレート パラメータは本当にオプションですか?
c++11 - P が参照型でない場合: A が参照型の場合、A の型の参照修飾子は型推定で無視されます。
私はテンプレートの引数の推論について学んでいます。 < 14.8.2.1 Deducing template arguments from a function call >(C++11 draft) を何度も読みましたが、ルールを逃したと思います:
If P is not a reference type: A が参照型の場合、型推定では A の型の参照修飾子は無視されます。
それは私のせいに違いないのですが、それがどこにあるのかわかりません。
c++ - テンプレート テンプレート パラメーターは、新しい C++ 標準でサポートされている関数に対してサポートされていますか?
本 C++ Template: The complete Guide で次のステートメントを見つけました。
関数テンプレートのテンプレート テンプレート パラメーターは使用できません。
しかし、彼は次のコードをコンパイルして実行します。
これは、新しい C++ 標準が関数のテンプレート テンプレート パラメーターをサポートするということですか? 次の投稿の答えは別のことを言っています: How to get template template argument deduction working with functions?
c++ - std::basic_string でテンプレート引数を推測できませんでした
私の問題のストライプ化されたバージョン:
これら2つの機能をマージしたい:
..1 つのテンプレート化された関数に:
Foo
とのよう(1)
に呼び出せると思っていたのです(2)
が、驚いたことにうまくいきませんでし(3)
た。
const
パラメータの修飾子を削除してs
、参照( )を削除するか、の代わりに で&
呼び出してみましたが、すべて同じ結果になりました。lvalues
rvalues
コンパイラ (gcc と VS の両方 - したがって、標準に準拠した動作であると確信しています) は、 のテンプレート引数を推測できませんFoo
。もちろん、のように呼び出しても機能しFoo
ますFoo<char>(...)
。
(3)
したがって、特に呼び出しは、呼び出し元のパラメーター オブジェクトの型と関数の引数の型の間で 1 対 1 の型であるため、これがなぜなのかを理解したいと思います。
第二に、これに対する回避策が必要です: 1 つのテンプレート化された関数を使用できるようにし、それを および のように呼び出すことができるようにし(1)
ます(2)
。
編集
(2)
そして(3)
仕事をする。私はコンパイラで間違っていると宣言していました(私の質問とは異なります):
申し訳ありません。
c++ - マクロ __STL_FUNCTION_TMPL_PARTIAL_ORDER が std_pair.h でテンプレート関数を囲む必要があるのはなぜですか?
今日、stl_pair.h に次のコードが表示されます。
テンプレート関数が関数テンプレートの部分的な特殊化と関連しているとは思いません。私が間違っている ?