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

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

c++ - enable_if テンプレート関数の重要な順序

のビジターを次のように定義することがコンパイラーにとって重要なのはなぜですか。std::tuple

実際の例:コード

複数の enable_if スイッチの一般的なルールは、すべての関数のプロトタイプを作成してから、任意の順序で定義することだと思いますか? その結果、SFINAE で利用可能な正しい関数が常に表示されるようになりますか?

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

c++ - テンプレート宣言をコンパイルせずに、テンプレート クラス内でテンプレート パラメーターを使用するフレンド関数の実装を含めるのはなぜですか?

次のコードが与えられます。

コンパイラは、次の構文を使用せずに、テンプレート パラメーターを持つ両方のフレンド関数を問題なくコンパイルします。

また

また

テンプレートクラス自体の内部で実装によって定義されているためです。

コンパイラは、テンプレート宣言を含めずに、これらのフレンド関数をテンプレート パラメーターでコンパイルするにはどうすればよいでしょうか? クラス内に実装するだけで十分なのはなぜですか?

この概念については、 「テンプレート フレンドを使用するとリンカー エラーが発生するのはなぜですか?」のセクションで学びました。

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

c++ - C++: テンプレート クイックソート関数で「テンプレート パラメーターを推定できませんでした」というエラーを受け取る

テンプレート化されたクイックソート関数を作成しています。これにより、カスタムメイドの双方向リンク リスト クラスをイテレータを使用してクイックソートできます。エラーが発生します

これが私のコードです:

私の理解では、この問題を調査し、他の人が受け取った解決策を読んだ後、テンプレート宣言の外でリストクラスを直接いじっています。コンパイラによると、メインのクイックソート関数が再帰関数を呼び出すときに発生すると思いますか? この問題を引き起こしたのは、私が何をしたのか完全にはわかりません。

さて、テンプレートを介して別のクラスを呼び出して、このようなテンプレート関数を試すのはこれが初めてのことです。1つだけを示しているだけですが、実際にこれに多くの間違いがあっても驚かないでしょう. この試みで私が犯した他の間違いについて誰かが私に知らせることができる場合は、それらも含めてください.

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

c++ - テンプレートクラスのテンプレートフレンド関数

クラスのプライベート データ メンバーにアクセスするための次のテンプレート クラスとテンプレート関数があります。

のフレンド関数として 2 つの関数を宣言するために、フレンドシップを宣言するためMyVar<T>に の宣言内で次の方法を試しましたtemplate<class T> class MyVar。それらのどれも機能しません。どうすればいいですか?

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

c++ - member-function を引数として function-template に渡す

c++ でルーチンを実装する 3 つの方法を検討してください: ファンクター、メンバー関数、および非メンバー関数を使用します。例えば、

上記の 3 つの関数を呼び出すテンプレート関数を考えてみましょう。

FOO::m_functionevalを介して呼び出す適切な方法は何ですか? 私は試した:

0 投票する
3 に答える
4015 参照

c++ - std::begin を特殊化する方法は?

std::beginカスタムコンテナに特化しようとしています。forコンテナで範囲ベースを使用したいので、これを行っています。これは私が持っているものです:

begin専門分野の定義で次のエラーが発生します。

関数テンプレートの特殊化 'begin' に一致する関数テンプレートはありません

私は何を間違っていますか?

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

c++ - インスタンス化・テンプレート機能特化

私は C++ に関する本を読んでいますが、何らかの理由で、関数のテンプレートの特殊化 (暗黙的なテンプレートのインスタンス化、明示的なテンプレートのインスタンス化、および明示的な特殊化) を理解できないようです。

明確にするために、一般的なテンプレート関数と特殊化の両方をオーバーライドする非テンプレート関数を宣言/定義できる場合に、明示的なテンプレートのインスタンス化または明示的な特殊化の必要性を理解していません。

いつ、どこで、なぜ明示的なテンプレートのインスタンス化や関数の明示的な特殊化を使用しますか?

0 投票する
3 に答える
2433 参照

c++ - decltype を使用した関数パラメーターの型

注: この質問で提供されている例は、製品コードではなく、まったく意味がありません。私の問題を説明するためにそこにあるだけです。

の可能性をテストしていましたdecltype。特に、関数のパラメーターの型を推測するために使用されている場合は、問題が発生しました。

次のような構造の 2 つのクラスがあるとします。

m_Valueここで、(何らかの方法で) 型パラメーター (上記のいずれか) のインスタンスを文字列で取得し、指定された値をそのメンバーに割り当てる関数を作成しました。

現在、value使用されるクラスは member の型が異なるため、パラメーターの型は型パラメーターに依存していますm_Value。ご覧のとおり、を使用して解決しましたdecltype。さて、通常、次decltypeのようにパラメーターで使用します。

しかし、実際のインスタンスは関数本体で取得され、関数の引数が宣言された時点では使用できないため、ここでは明らかに不可能です。

get_fake_ptr一致する型の を返すテンプレート関数を使用して一緒にハックしたnullptrので、コンパイラがメンバー型を決定するために使用できる「疑似インスタンス」があります。そしてそれは動作します:

働く

さて、私が言ったように、これは私には本当にハックに思えます。そう:

この問題を解決するより良い方法はありますか?

ありがとうございました!

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

c++ - C++ Xcode テンプレート関数と配列関数変数として

皆さん、

Xcode 6.0がこの構文を好まない理由を理解しようとしています

test(n) 呼び出しに一致する関数がないと Xcode が文句を言うのを見ます。