問題タブ [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.

0 投票する
5 に答える
208 参照

c++ - 「AnySTLContainer」のテンプレート" c++

テンプレート化された (STL) コンテナーを使用する関数を提供する方法を探していますが、その要素は特定の型 (例: int) である必要があります。

これらの関数呼び出しは有効である必要があります。

これらの関数呼び出しは無効である必要があります:

コンテナが受け入れられるように「foo」をテンプレート化する方法はありintますが、異なる要素タイプのコンテナは受け入れられませんか?

ベスト、ベン

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

c++ - 関数テンプレートの推定と initliizer_list

次の関数テンプレートがあります。

次のように関数を呼び出します。

そしてそれはうまくいきます。

ただし、次のように呼び出してみると:

正しい型を推測できず、次のようなコンパイル エラーが発生します。

次のように呼び出すと:

型推論は機能しますが、次のように呼び出してみると:

以前と同じコンパイル エラーが発生します。

私の質問は:

テンプレート型推定が (c) では機能するのに (d) では機能しないのはなぜですか?

(コンパイラは gcc v4.6.3、フラグ -std=c++11 付き)

同様の古いSOの投稿を見てきましたが、この質問に完全に答えているようには見えませんでした。

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

c++ - 参照によって2D配列を渡す場合、コンパイラが配列のサイズを計算できないのはなぜですか

不思議に思っている-私は次の関数を書いた

そしてそれを次のように呼び出します

コンパイルはエラーなしで実行されます。しかし、「arr」を次のように参照に変更すると

エラーが発生します:

私はそれを修正する方法を知っています

しかし、なぜそれが起こっているのか理解できませんか?

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

c++ - このテンプレートの推論が失敗する理由

このコードは、clang++ 6.0 または g++4.9.1 ではコンパイルされません (コードに意味はありませんが、これが発生する最小の例です)。

このエラーが発生します

それを修正するには、bar()の呼び出しを次のように変更する必要があります。

コンパイラがテンプレート引数を推測できない理由がわかりません。奇妙なことに、コンパイラは完全に満足していfoo()ます。

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

c++ - 「boost::mpl::identity」のポイントは何ですか::ここに入力?

clampブーストの実装を確認していました:

ドキュメントを調べるとidentity、テンプレート引数を変更せずに返します。

恒等メタ関数。X を変更せずに返します。

では、ここでそれを使用するポイントは何ですか?

typename boost::mpl::identity<T>::typeと同等ではありませんTか?

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

c++ - Base クラスの型パラメータを自動検出する

私はうまくいった次のコードを持っていました:

このアプローチは、 as が呼び出されたときに as 型を自動検出TできintますregisterBase(Derived())。問題は、次のように切り替えると発生しshared_ptrます。

不正な型から保護できますが、型を自動検出できないようですTBase<T>テンプレート推論が機能するように、shared_ptr を自動的にダウンキャストするために使用できるトリックはありますか? または、 typename を見つける別の方法はありTますか?

PS:Q拡張が乗算された場合Base<T>、エラーが発生します (自動推定は失敗するはずです)。

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

c++ - VisualStudio 2013 で推論が失敗し、最初のテンプレート引数が特定の型である (任意にテンプレート化されている)

引数が特定の最初のテンプレート パラメーター (任意にテンプレート化された) を持つ特定のテンプレートである場合、計算を行う特定の関数が必要です。

これらのクラスを検討してください

を使用して目標を達成しようとしました

問題: MSVS 2013 は を推測できませんY

エラーの理由 (MSVS による) は次のとおりです。

テンプレート - の引数はからconst Y<A<Z>> &推定できません。D<A<int>, B<S>>S=A<int>

私の目標は、特定の型を処理するオーバーロード / 特殊化を作成することですYY::value_type/ の最初のテンプレート パラメーターは、foo のシグネチャを保持するY任意の場所にすることができます。A<T>void foo (Y const &);

これは MSVS のバグですか (foo(D<A<int>>());実際には g++ を使用して 2 を出力するため)、何か不足していますか?

PS: 気になる方はメリークリスマス...