問題タブ [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++ - 転送参照とテンプレート テンプレート
次の 2 つのテンプレート関数を検討してください。
なぜ前者は (転送参照を使用して) 左辺値を受け入れ、後者は受け入れないのですか?
ID エイリアス テンプレートを転送参照にすることはできますか? これにも関連している可能性がありますが、参照の転送に関する制限の別の側面をカバーしているようです.
c++ - C++ テンプレート クラス メンバーの特殊化と継承
次のような一連のクラスを書き留めたいと思います。
- あらゆる種類のオブジェクトとそのリレート ゲッターをラップする純粋な仮想クラス。
- 必要なオブジェクトの種類ごとに 1 つまたは複数のクラスを作成し、仮想オブジェクトを拡張して getter をオーバーライドして特殊化します。
ラッパーのテンプレート クラス ソリューションはこのケースに適しているようですが、次の 2 つの異なるコンテキストで使用する必要があります。
- 最初のものはラッパーの実装を認識していません。この場合、 ( Javaのように) 任意のクラス名を表す
Wrapper<AnyObj> var;
withを宣言する必要があります。私の知る限り、これは C++ では実行できません。AnyObj
?
- 2 つ目は、特定のラッパー実装に制限されています。この場合、(ダウンキャストするのではなく) ラップされたオブジェクトを正確な型で返すゲッターが必要です。
私が正しければ、テンプレート クラスを使用できません。さらに、ラッパーにはprotected: T* wrappedObject
メンバーがありません。
Java のアプローチにとらわれているのか、最初から間違った考えを持っているのか、それとも何かが欠けているのかはわかりません。
どんな提案でも大歓迎です。
c++ - テンプレート化された関数をパラメーターとして使用する STL アルゴリズム
でSTLが提供するアルゴリズムでテンプレート化された関数を使用するにはどうすればよいですか? たとえば、コンパイラが関数のテンプレート パラメーターを推測できないため、次のコードはコンパイルされません。<algorithm>
predicate
c++ - C++ フレンド テンプレート関数 - minGW エラーですが、VS2015 ではありません
次のコードは、Visual Studio 2015 では問題なくコンパイルされますが、minGW ではその下に示す警告とエラーが発生します。
私はこのようなもののいくつかについて専門家とはほど遠いので、問題が何であるかはわかりません. クラス自体のフレンド宣言の直前に次のコードが必要だと言っているようですが、そこに置くと他のコンパイルエラーが発生します:
前もって感謝します!
以下の投稿で @Trevor Hickey によって提案された変更を行った後、フレンド テンプレート機能に関する警告は消えました。ただし、「要素」(フレンド関数内) がスコープ内で宣言されていないというエラーが引き続き発生します。
c++ - SFINAE、制約、または概念を使用して専門化を制限していますか?
次のプログラムは正常に実行されます。
構造体 B と C をコンパイル時に明示的に宣言し、アプリにとって意味のある特殊化のみを許可することが重要です。
しかし、上記のコードに見られるように、下流の開発者 (いつか!) が、意味的に意味をなさない構文的に正しいパターンを作成できる可能性があります。具体的には、アプリは、クラスと関数の型が等しい型の使用方法しか認識していません。残りは無意味です。
これは、SFINAE、Constraints、Concepts などの新しい C++17+ 機能の 1 つのケースのようです。私はこれらについて読んでいますが、その選択をする判断はまだありません. Alternatives の下の cppreference では、コンパイラが機能している場合 (私は VS2015 を使用しています)、SFINAE の代わりに Concepts を提案しています。
型名 J が型名 U と同じになるように制約するにはどうすればよいでしょうか?
c++ - 静的ポリモーフィズム階層による静的ビジターの結合
私のプログラムの目的は、クラス階層で静的ポリモーフィズムを使用しながら、一連の静的ビジターでアクセスできるデータのリストを作成することです。
CRTP を介して静的ポリモーフィズムを利用するクラスの階層を作成しました。
DerivedBaseData を格納して、後で反復してアクセスできるようにしたいと考えています。
静的ビジターを静的ポリモーフィズム階層と結合する方法を探しています。コンテナーでクラスを使用するために、テンプレート クラスではない静的ポリモーフィズムで VirtualBaseData クラスが必要です。ただし、VirtualBaseData クラスをテンプレート クラスにすることができないため、CRTPattern で行ったように、適切な static_cast を派生クラスに作成することができません。
私の質問は、私の静的ポリモーフィズム設定と静的ビジター パターンを保持する優れた戦略を持っている人はいますか?
参考までに: http://hillside.net/plop/2006/Papers/Library/portableProgrammingPL.pdfの 21 ~ 23 ページで説明されているように、静的ビジターを実装しました。
c++ - Variadic テンプレート: 候補は 1 つの引数を期待し、0 が提供されます (推定エラー)
このコードスニペットを見てください
コンパイルすると、次のように表示されます。
候補: テンプレート void print(T)
候補は 1 つの引数を期待していますが、0 が提供されました
そして彼は正しい。実際、パラメーター パックでは引数を指定しませんでした。
しかし、では、なぜこのコードはコンパイルされるのでしょうか?
最初に行うことは、最初の 0 をinitializer_list<>にプッシュすることです
では、先に進みましょう: コンパイラは
print() を呼び出そうとします… ああ、待って… Parameter Packは空で、print() 関数は 1 つのパラメーターを取ります。
では、なぜ と評価されるauto x = {0};
のでしょうか?
コンパイラが以前とまったく同じエラーを表示しないのはなぜですか?