問題タブ [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++ - 「AnySTLContainer」のテンプレート" c++
テンプレート化された (STL) コンテナーを使用する関数を提供する方法を探していますが、その要素は特定の型 (例: int
) である必要があります。
これらの関数呼び出しは有効である必要があります。
これらの関数呼び出しは無効である必要があります:
コンテナが受け入れられるように「foo」をテンプレート化する方法はありint
ますが、異なる要素タイプのコンテナは受け入れられませんか?
ベスト、ベン
c++ - 関数テンプレートの推定と initliizer_list
次の関数テンプレートがあります。
次のように関数を呼び出します。
そしてそれはうまくいきます。
ただし、次のように呼び出してみると:
正しい型を推測できず、次のようなコンパイル エラーが発生します。
次のように呼び出すと:
型推論は機能しますが、次のように呼び出してみると:
以前と同じコンパイル エラーが発生します。
私の質問は:
テンプレート型推定が (c) では機能するのに (d) では機能しないのはなぜですか?
(コンパイラは gcc v4.6.3、フラグ -std=c++11 付き)
同様の古いSOの投稿を見てきましたが、この質問に完全に答えているようには見えませんでした。
c++ - 参照によって2D配列を渡す場合、コンパイラが配列のサイズを計算できないのはなぜですか
不思議に思っている-私は次の関数を書いた
そしてそれを次のように呼び出します
コンパイルはエラーなしで実行されます。しかし、「arr」を次のように参照に変更すると
エラーが発生します:
私はそれを修正する方法を知っています
しかし、なぜそれが起こっているのか理解できませんか?
c++ - このテンプレートの推論が失敗する理由
このコードは、clang++ 6.0 または g++4.9.1 ではコンパイルされません (コードに意味はありませんが、これが発生する最小の例です)。
このエラーが発生します
それを修正するには、bar()
の呼び出しを次のように変更する必要があります。
コンパイラがテンプレート引数を推測できない理由がわかりません。奇妙なことに、コンパイラは完全に満足していfoo()
ます。
c++ - Base クラスの型パラメータを自動検出する
私はうまくいった次のコードを持っていました:
このアプローチは、 as が呼び出されたときに as 型を自動検出T
できint
ますregisterBase(Derived())
。問題は、次のように切り替えると発生しshared_ptr
ます。
不正な型から保護できますが、型を自動検出できないようですT
。Base<T>
テンプレート推論が機能するように、shared_ptr を自動的にダウンキャストするために使用できるトリックはありますか? または、 typename を見つける別の方法はありT
ますか?
PS:Q
拡張が乗算された場合Base<T>
、エラーが発生します (自動推定は失敗するはずです)。
c++ - VisualStudio 2013 で推論が失敗し、最初のテンプレート引数が特定の型である (任意にテンプレート化されている)
引数が特定の最初のテンプレート パラメーター (任意にテンプレート化された) を持つ特定のテンプレートである場合、計算を行う特定の関数が必要です。
これらのクラスを検討してください
を使用して目標を達成しようとしました
問題: MSVS 2013 は を推測できませんY
。
エラーの理由 (MSVS による) は次のとおりです。
テンプレート - の引数はから
const Y<A<Z>> &
推定できません。D<A<int>, B<S>>
S=A<int>
私の目標は、特定の型を処理するオーバーロード / 特殊化を作成することですY
。Y::value_type
/ の最初のテンプレート パラメーターは、foo のシグネチャを保持するY
任意の場所にすることができます。A<T>
void foo (Y const &);
これは MSVS のバグですか (foo(D<A<int>>());
実際には g++ を使用して 2 を出力するため)、何か不足していますか?
PS: 気になる方はメリークリスマス...