問題タブ [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 投票する
1 に答える
940 参照

c++ - テンプレート推定: 継承で機能するのはなぜですか (変換で失敗した場合)?

私が観察した C++ 言語の動作を理解しようとしています (前半は理解できました)。

私のセットアップ: 2 つのテンプレート クラス:AC. Aに変換できますCが、その逆はできません。それらにはいくつかの共通の動作があるため、 と同じように動作させるためにからへCの変換のみに依存して、いくつかのロジックを実装することを探していました。例では演算子のオーバーロードを使用していますが、議論は関数またはメソッドと同じだと思います。ACAC

私が最初に試したのは、変換コンストラクターを使用することでした:

これは実際にSOとネットを検索して理解したと思う前半です。私が収集したものから、変換を試行する前にテンプレート引数を正確に一致させる必要があります。この場合、可能な変換を考慮せずに推定することはできないため、推定は不可能です。これは、オペレータが非テンプレート フレンドになると回避できますC(しかし、私はそれが好きではありません)。

次に試したのは、継承を使用することでした。

これについては、ネット上で説明が見つかりませんでした(検索方法がわからなかったのかもしれません)。

私の質問は、(2 番目のケース)の基本クラスであるが、 (1 番目のケース)に変換可能な場合は推定できないため、A変換可能な場合にテンプレートを推定できるのはなぜですか?CCAC


編集

私が試したコメントでKerrekSBが示唆したように:

私の最初のケース(継承ではなく変換)

この場合:

c1 < a1彼の答えを使用すると、2 番目の引数は推論プロセスの一部ではないため、2 番目の引数では暗黙の変換が考慮されるため、うまくいくと思います。

私も試しました:

これでも動作しませんc1 < c2。これは、推定プロセスにパラメーターが関与していないためだと思います。

私は正しいですか?

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

c++ - gcc が関数テンプレートの正しい型を推測できないのはなぜですか?

vs2013: OK!

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

c++ - どの foo テンプレートがインスタンス化されますか?

このコードを考えると:

私は上記の C++ プログラムを持っていますが、標準で規定されている規則に従って、2 つの「foo」テンプレートのどちらが main の「foo」呼び出しに対してインスタンス化されるのか疑問に思っています。

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

c++ - 推定引数と同じ型のローカル変数を作成する最も簡単な方法は何ですか?

すなわち:

これまでのところ、私は使用しています:

しかし、もっと簡単な代替手段があることを本当に望んでいます!

0 投票する
4 に答える
77 参照

c++ - 可変数のテンプレート化された引数を使用して、テンプレート化されたクラスのメンバーにアクセスする

テンプレート化された引数の可変数を持つテンプレート化されたクラスがあります。これらの場合 (私は C++11 を買う余裕がありません) のように、呼び出す既定のクラスを作成し、none以下のように既定として配置することをお勧めします。

この段階では、テンプレート化された各引数にアクセスできるジェネリック/テンプレート化されたアクセサー関数を実装する方法がわかりません。

テンプレート化された引数はすべて異なるため、テンプレート化された引数ごとに A::extract() を特殊化しました。

これを行うより良い方法はありますか?私が見ることができるタグ付けの種類はありますか?

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

c++ - C++ テンプレート: コンパイラへのヒント テンプレート引数?

次のクラス定義があります。

これを何らかの形でコンパイラに示唆する方法はありますか (そして、間違った入力をアサートしますか?)

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

c++ - 関数をテンプレート型として渡し、C ++でその型を差し引く

このコードを単純化するにはどうすればよいですか? コメントのようにコードを書きたいです。C++11 の result_of と decltype は役に立ちそうですが、クラス内の関数 f の入力と出力の型を推測する正しいコードを書くほど賢くありません。光を見るのを手伝ってくれませんか?ありがとう

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

c++ - sizeof(T) を台無しにする整数型

上記のクラスを取得したので、次のことができるようにオーバーロードを追加したいと思いoperator>>ます。

そこで、このオーバーロード関数を作成しました:

しかし、整数型が変換されintてから台無しになるため、それが機能するかどうかはわかりませんsizeof(T)

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

c++ - 非推定コンテキストとは何ですか?

最近、「テンプレート引数の推定がここで機能しないのはなぜですか? 」という質問に出くわしましたが、答えは「推定されていないコンテキストです」に要約できます。

具体的には、最初のものはそれがそのようなことであると言い、「詳細」の標準にリダイレクトしますが、2番目のものは標準を引用しますが、これは控えめに言っても不可解です.

だれか、私のような凡人に、非推定コンテキストとは何か、それがいつ発生し、なぜ発生するのかを説明してもらえますか?