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

c++ - 転送参照とテンプレート テンプレート

次の 2 つのテンプレート関数を検討してください。

なぜ前者は (転送参照を使用して) 左辺値を受け入れ、後者は受け入れないのですか?


ID エイリアス テンプレートを転送参照にすることはできますか? これにも関連している可能性がありますが、参照の転送に関する制限の別の側面をカバーしているようです.

0 投票する
0 に答える
89 参照

c++ - C++ テンプレート クラス メンバーの特殊化と継承

次のような一連のクラスを書き留めたいと思います。

  • あらゆる種類のオブジェクトとそのリレート ゲッターをラップする純粋な仮想クラス。
  • 必要なオブジェクトの種類ごとに 1 つまたは複数のクラスを作成し、仮想オブジェクトを拡張して getter をオーバーライドして特殊化します。

ラッパーのテンプレート クラス ソリューションはこのケースに適しているようですが、次の 2 つの異なるコンテキストで使用する必要があります。

  • 最初のものはラッパーの実装を認識していません。この場合、 ( Javaのように) 任意のクラス名を表すWrapper<AnyObj> var;withを宣言する必要があります。私の知る限り、これは C++ では実行できません。AnyObj?
  • 2 つ目は、特定のラッパー実装に制限されています。この場合、(ダウンキャストするのではなく) ラップされたオブジェクトを正確な型で返すゲッターが必要です。

私が正しければ、テンプレート クラスを使用できません。さらに、ラッパーにはprotected: T* wrappedObjectメンバーがありません。

Java のアプローチにとらわれているのか、最初から間違った考えを持っているのか、それとも何かが欠けているのかはわかりません。

どんな提案でも大歓迎です。

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

c++ - テンプレート化された関数をパラメーターとして使用する STL アルゴリズム

でSTLが提供するアルゴリズムでテンプレート化された関数を使用するにはどうすればよいですか? たとえば、コンパイラが関数のテンプレート パラメーターを推測できないため、次のコードはコンパイルされません。<algorithm>predicate

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

c++ - C++ フレンド テンプレート関数 - minGW エラーですが、VS2015 ではありません

次のコードは、Visual Studio 2015 では問題なくコンパイルされますが、minGW ではその下に示す警告とエラーが発生します。

私はこのようなもののいくつかについて専門家とはほど遠いので、問題が何であるかはわかりません. クラス自体のフレンド宣言の直前に次のコードが必要だと言っているようですが、そこに置くと他のコンパイルエラーが発生します:

前もって感謝します!

以下の投稿で @Trevor Hickey によって提案された変更を行った後、フレンド テンプレート機能に関する警告は消えました。ただし、「要素」(フレンド関数内) がスコープ内で宣言されていないというエラーが引き続き発生します。

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

c++ - SFINAE、制約、または概念を使用して専門化を制限していますか?

次のプログラムは正常に実行されます。

構造体 B と C をコンパイル時に明示的に宣言し、アプリにとって意味のある特殊化のみを許可することが重要です。

しかし、上記のコードに見られるように、下流の開発者 (いつか!) が、意味的に意味をなさない構文的に正しいパターンを作成できる可能性があります。具体的には、アプリは、クラスと関数の型が等しい型の使用方法しか認識していません。残りは無意味です。

これは、SFINAE、Constraints、Concepts などの新しい C++17+ 機能の 1 つのケースのようです。私はこれらについて読んでいますが、その選択をする判断はまだありません. Alternatives の下の cppreference では、コンパイラが機能している場合 (私は VS2015 を使用しています)、SFINAE の代わりに Concepts を提案しています。

型名 J が型名 U と同じになるように制約するにはどうすればよいでしょうか?

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

c++ - 静的ポリモーフィズム階層による静的ビジターの結合

私のプログラムの目的は、クラス階層で静的ポリモーフィズムを使用しながら、一連の静的ビジターでアクセスできるデータのリストを作成することです。

CRTP を介して静的ポリモーフィズムを利用するクラスの階層を作成しました。

DerivedBaseData を格納して、後で反復してアクセスできるようにしたいと考えています。

静的ビジターを静的ポリモーフィズム階層と結合する方法を探しています。コンテナーでクラスを使用するために、テンプレート クラスではない静的ポリモーフィズムで VirtualBaseData クラスが必要です。ただし、VirtualBaseData クラスをテンプレート クラスにすることができないため、CRTPattern で行ったように、適切な static_cast を派生クラスに作成することができません。

私の質問は、私の静的ポリモーフィズム設定と静的ビジター パターンを保持する優れた戦略を持っている人はいますか?

参考までに: http://hillside.net/plop/2006/Papers/Library/portableProgrammingPL.pdfの 21 ~ 23 ページで説明されているように、静的ビジターを実装しました。

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

c++ - Variadic テンプレート: 候補は 1 つの引数を期待し、0 が提供されます (推定エラー)

このコードスニペットを見てください

コンパイルすると、次のように表示されます。

候補: テンプレート void print(T)

候補は 1 つの引数を期待していますが、0 が提供されました

そして彼は正しい。実際、パラメーター パックでは引数を指定しませんでした。

しかし、では、なぜこのコードはコンパイルされるのでしょうか?

最初に行うことは、最初の 0 をinitializer_list<>にプッシュすることです

では、先に進みましょう: コンパイラは

print() を呼び出そうとします… ああ、待って… Parameter Packは空で、print() 関数は 1 つのパラメーターを取ります。

では、なぜ と評価されるauto x = {0};のでしょうか?

コンパイラが以前とまったく同じエラーを表示しないのはなぜですか?