問題タブ [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++ - テンプレート推定: 継承で機能するのはなぜですか (変換で失敗した場合)?
私が観察した C++ 言語の動作を理解しようとしています (前半は理解できました)。
私のセットアップ: 2 つのテンプレート クラス:A
とC
. A
に変換できますC
が、その逆はできません。それらにはいくつかの共通の動作があるため、 と同じように動作させるためにからへC
の変換のみに依存して、いくつかのロジックを実装することを探していました。例では演算子のオーバーロードを使用していますが、議論は関数またはメソッドと同じだと思います。A
C
A
C
私が最初に試したのは、変換コンストラクターを使用することでした:
これは実際にSOとネットを検索して理解したと思う前半です。私が収集したものから、変換を試行する前にテンプレート引数を正確に一致させる必要があります。この場合、可能な変換を考慮せずに推定することはできないため、推定は不可能です。これは、オペレータが非テンプレート フレンドになると回避できますC
(しかし、私はそれが好きではありません)。
次に試したのは、継承を使用することでした。
これについては、ネット上で説明が見つかりませんでした(検索方法がわからなかったのかもしれません)。
私の質問は、(2 番目のケース)の基本クラスであるが、 (1 番目のケース)に変換可能な場合は推定できないため、A
変換可能な場合にテンプレートを推定できるのはなぜですか?C
C
A
C
編集
私が試したコメントでKerrekSBが示唆したように:
私の最初のケース(継承ではなく変換)
この場合:
c1 < a1
彼の答えを使用すると、2 番目の引数は推論プロセスの一部ではないため、2 番目の引数では暗黙の変換が考慮されるため、うまくいくと思います。
私も試しました:
これでも動作しませんc1 < c2
。これは、推定プロセスにパラメーターが関与していないためだと思います。
私は正しいですか?
c++ - gcc が関数テンプレートの正しい型を推測できないのはなぜですか?
vs2013: OK!
c++ - どの foo テンプレートがインスタンス化されますか?
このコードを考えると:
私は上記の C++ プログラムを持っていますが、標準で規定されている規則に従って、2 つの「foo」テンプレートのどちらが main の「foo」呼び出しに対してインスタンス化されるのか疑問に思っています。
c++ - 推定引数と同じ型のローカル変数を作成する最も簡単な方法は何ですか?
すなわち:
これまでのところ、私は使用しています:
しかし、もっと簡単な代替手段があることを本当に望んでいます!
c++ - 可変数のテンプレート化された引数を使用して、テンプレート化されたクラスのメンバーにアクセスする
テンプレート化された引数の可変数を持つテンプレート化されたクラスがあります。これらの場合 (私は C++11 を買う余裕がありません) のように、呼び出す既定のクラスを作成し、none
以下のように既定として配置することをお勧めします。
この段階では、テンプレート化された各引数にアクセスできるジェネリック/テンプレート化されたアクセサー関数を実装する方法がわかりません。
テンプレート化された引数はすべて異なるため、テンプレート化された引数ごとに A::extract() を特殊化しました。
これを行うより良い方法はありますか?私が見ることができるタグ付けの種類はありますか?
c++ - C++ テンプレート: コンパイラへのヒント テンプレート引数?
次のクラス定義があります。
これを何らかの形でコンパイラに示唆する方法はありますか (そして、間違った入力をアサートしますか?)
c++ - 関数をテンプレート型として渡し、C ++でその型を差し引く
このコードを単純化するにはどうすればよいですか? コメントのようにコードを書きたいです。C++11 の result_of と decltype は役に立ちそうですが、クラス内の関数 f の入力と出力の型を推測する正しいコードを書くほど賢くありません。光を見るのを手伝ってくれませんか?ありがとう
c++ - sizeof(T) を台無しにする整数型
上記のクラスを取得したので、次のことができるようにオーバーロードを追加したいと思いoperator>>
ます。
そこで、このオーバーロード関数を作成しました:
しかし、整数型が変換されint
てから台無しになるため、それが機能するかどうかはわかりませんsizeof(T)
c++ - 非推定コンテキストとは何ですか?
最近、「テンプレート引数の推定がここで機能しないのはなぜですか? 」という質問に出くわしましたが、答えは「推定されていないコンテキストです」に要約できます。
具体的には、最初のものはそれがそのようなことであると言い、「詳細」の標準にリダイレクトしますが、2番目のものは標準を引用しますが、これは控えめに言っても不可解です.
だれか、私のような凡人に、非推定コンテキストとは何か、それがいつ発生し、なぜ発生するのかを説明してもらえますか?