問題タブ [template-function]
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++ - enable_if テンプレート関数の重要な順序
のビジターを次のように定義することがコンパイラーにとって重要なのはなぜですか。std::tuple
実際の例:コード
複数の enable_if スイッチの一般的なルールは、すべての関数のプロトタイプを作成してから、任意の順序で定義することだと思いますか? その結果、SFINAE で利用可能な正しい関数が常に表示されるようになりますか?
c++ - テンプレート宣言をコンパイルせずに、テンプレート クラス内でテンプレート パラメーターを使用するフレンド関数の実装を含めるのはなぜですか?
次のコードが与えられます。
コンパイラは、次の構文を使用せずに、テンプレート パラメーターを持つ両方のフレンド関数を問題なくコンパイルします。
また
また
テンプレートクラス自体の内部で実装によって定義されているためです。
コンパイラは、テンプレート宣言を含めずに、これらのフレンド関数をテンプレート パラメーターでコンパイルするにはどうすればよいでしょうか? クラス内に実装するだけで十分なのはなぜですか?
この概念については、 「テンプレート フレンドを使用するとリンカー エラーが発生するのはなぜですか?」のセクションで学びました。
c++ - C++: テンプレート クイックソート関数で「テンプレート パラメーターを推定できませんでした」というエラーを受け取る
テンプレート化されたクイックソート関数を作成しています。これにより、カスタムメイドの双方向リンク リスト クラスをイテレータを使用してクイックソートできます。エラーが発生します
これが私のコードです:
私の理解では、この問題を調査し、他の人が受け取った解決策を読んだ後、テンプレート宣言の外でリストクラスを直接いじっています。コンパイラによると、メインのクイックソート関数が再帰関数を呼び出すときに発生すると思いますか? この問題を引き起こしたのは、私が何をしたのか完全にはわかりません。
さて、テンプレートを介して別のクラスを呼び出して、このようなテンプレート関数を試すのはこれが初めてのことです。1つだけを示しているだけですが、実際にこれに多くの間違いがあっても驚かないでしょう. この試みで私が犯した他の間違いについて誰かが私に知らせることができる場合は、それらも含めてください.
c++ - テンプレートクラスのテンプレートフレンド関数
クラスのプライベート データ メンバーにアクセスするための次のテンプレート クラスとテンプレート関数があります。
のフレンド関数として 2 つの関数を宣言するために、フレンドシップを宣言するためMyVar<T>
に の宣言内で次の方法を試しましたtemplate<class T> class MyVar
。それらのどれも機能しません。どうすればいいですか?
c++ - member-function を引数として function-template に渡す
c++ でルーチンを実装する 3 つの方法を検討してください: ファンクター、メンバー関数、および非メンバー関数を使用します。例えば、
上記の 3 つの関数を呼び出すテンプレート関数を考えてみましょう。
FOO::m_function
evalを介して呼び出す適切な方法は何ですか?
私は試した:
c++ - std::begin を特殊化する方法は?
std::begin
カスタムコンテナに特化しようとしています。for
コンテナで範囲ベースを使用したいので、これを行っています。これは私が持っているものです:
begin
専門分野の定義で次のエラーが発生します。
関数テンプレートの特殊化 'begin' に一致する関数テンプレートはありません
私は何を間違っていますか?
c++ - インスタンス化・テンプレート機能特化
私は C++ に関する本を読んでいますが、何らかの理由で、関数のテンプレートの特殊化 (暗黙的なテンプレートのインスタンス化、明示的なテンプレートのインスタンス化、および明示的な特殊化) を理解できないようです。
明確にするために、一般的なテンプレート関数と特殊化の両方をオーバーライドする非テンプレート関数を宣言/定義できる場合に、明示的なテンプレートのインスタンス化または明示的な特殊化の必要性を理解していません。
いつ、どこで、なぜ明示的なテンプレートのインスタンス化や関数の明示的な特殊化を使用しますか?
c++ - decltype を使用した関数パラメーターの型
注: この質問で提供されている例は、製品コードではなく、まったく意味がありません。私の問題を説明するためにそこにあるだけです。
の可能性をテストしていましたdecltype
。特に、関数のパラメーターの型を推測するために使用されている場合は、問題が発生しました。
次のような構造の 2 つのクラスがあるとします。
m_Value
ここで、(何らかの方法で) 型パラメーター (上記のいずれか) のインスタンスを文字列で取得し、指定された値をそのメンバーに割り当てる関数を作成しました。
現在、value
使用されるクラスは member の型が異なるため、パラメーターの型は型パラメーターに依存していますm_Value
。ご覧のとおり、を使用して解決しましたdecltype
。さて、通常、次decltype
のようにパラメーターで使用します。
しかし、実際のインスタンスは関数本体で取得され、関数の引数が宣言された時点では使用できないため、ここでは明らかに不可能です。
get_fake_ptr
一致する型の を返すテンプレート関数を使用して一緒にハックしたnullptr
ので、コンパイラがメンバー型を決定するために使用できる「疑似インスタンス」があります。そしてそれは動作します:
さて、私が言ったように、これは私には本当にハックに思えます。そう:
この問題を解決するより良い方法はありますか?
ありがとうございました!
c++ - C++ Xcode テンプレート関数と配列関数変数として
皆さん、
Xcode 6.0がこの構文を好まない理由を理解しようとしています
test(n) 呼び出しに一致する関数がないと Xcode が文句を言うのを見ます。