問題タブ [crtp]
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++ - 「奇妙に繰り返されるテンプレートパターン」の実用的な使い方
「 Curiously Recurring Template Pattern 」の実用的な用途は何ですか? 一般的に示されている「カウントされたクラス」の例は、私にとって説得力のある例ではありません。
java - Java列挙型定義
私は Java ジェネリックをかなりよく理解していると思っていましたが、java.lang.Enum に次のような記述がありました。
誰かがこの型パラメータを解釈する方法を説明できますか? 同様の型パラメーターを使用できる場所の他の例を提供するためのボーナスポイント。
c++ - 動的ポリモーフィズムを回避する CRTP
C++ で CRTP を使用して、仮想メンバー関数のオーバーヘッドを回避するにはどうすればよいですか?
c++ - 不完全なタイプの無効な使用
プロジェクトでサブクラスのtypedefを使用しようとしていますが、以下の例で問題を特定しました。
誰かが私がどこで間違っているのか知っていますか?
これは私が得る出力です:
c++ - C++ CRTP の問題、MSVC エラー C2039
MSVC 2008 はこのコードをコンパイルしません:
表示されるエラーは、「エラー C2039: 'type' : is not a member of 'D'」です。何か案は?
c++ - ここで不思議なことに繰り返されるテンプレートパターン(C ++)を使用できますか?
私は次のようなものに単純化できるC++アプリケーションを持っています:
私のアプリケーションはパフォーマンスが重要です。コレクションには通常、何千ものウィジェットがあります。AbstractWidget
(数十ある)から派生したクラスは、通常、仮想関数の多くをオーバーライドしないままにします。オーバーライドされるものは、通常、非常に高速な実装になります。
これを考えると、いくつかの巧妙なメタプログラミングでシステムを最適化できると思います。目標は、コードを管理しやすくしながら、関数のインライン化を活用し、仮想関数の呼び出しを回避することです。不思議なことに繰り返されるテンプレートパターンを調べました(説明については、ここを参照してください)。これは私が望むことをほぼ実行しているようですが、完全ではありません。
ここでCRTPを機能させる方法はありますか?または、誰かが考えることができる他の賢い解決策はありますか?
c++ - すべての派生型のクラス テンプレートを部分的に特殊化する方法は?
std::tr1::hash
変更できない既存のテンプレート ( ) を基本クラスとすべての派生クラスに部分的に特化したいと考えています。その理由は、ポリモーフィズムに奇妙に繰り返されるテンプレート パターンを使用しており、ハッシュ関数が CRTP 基底クラスに実装されているためです。CRTP 基底クラスに部分的に特化したい場合は簡単です。次のように書くだけです。
しかし、この特殊化は実際の派生クラスとは一致せず、CRTPBase<Derived>
. 私が欲しいのは、Derived
それがから派生した場合にのみ、部分的な特殊化を書く方法ですCRTPBase<Derived>
。私の疑似コードは
...しかし、コンパイラはそれenable_if<condition, Derived>::type
がDerived
. を変更できる場合は、ドキュメントで推奨されているように、std::tr1::hash
使用する別のダミー テンプレート パラメータを追加するだけですが、それは明らかにあまり良い解決策ではありません。この問題を回避する方法はありますか? 作成するたびにカスタム ハッシュ テンプレートを指定する必要がありますか、それとも派生クラスごとに完全に特化する必要がありますか?boost::enable_if
enable_if
unordered_set
unordered_map
hash
java - JavaでCRTPにキャストする方法は?
基本的な一般的な割り当てを行う非常に単純なケースがあります。
しかし、Enum.valueOf()を呼び出すのは少し難しいです。私の場合、エラーは次のとおりです。
java.lang.Enum の valueOf(java.lang.Class,java.lang.String) は (java.lang.Class,java.lang.String) には適用できません
type が であるため、これは完全に理にかなっていClass<Object>
ます。しかし、Enum
CRTP であるため、型をキャストしてコンパイラを満足させる良い方法が見つかりません。生の型を使用することEnum.valueOf((Class)type, example))
が唯一の答えですか? 1つだけではなく2つの警告が表示されます。
java - javaの列挙型とジェネリックメソッド
Javaジェネリックシステムのいくつかのコーナーケースでまだ問題があります。
私はこの方法を持っています(私は署名にのみ興味があります):
(実装が時々 EnumSet を抽出し、実装が JComboBox などを抽出するインターフェースについて考えてみてください。)
実行時に取得したクラスで呼び出したいので、次のように呼び出します。
奇妙なエラーメッセージが表示されます:互換性のないタイプが見つかりました:java.lang.Object required:RETURN_TYPE
タイプの「t」の前で、呼び出しの開始ブラケットの直後の場合のメッセージの場所。
非ジェネリックなコンテキストから呼び出すと、動作します:
誰かがこの問題の説明と解決策を持っていますか?
これで遊びたい人のための完全なファイルは次のとおりです。
前もって感謝します、
ニコ
c++ - テンプレート パラメーターから継承し、C++ でアップキャストする
私は VS2008 でこのコードを使用しようとしました (そして、サンプルにあまりにも多くのコンテキストが含まれている可能性があります...):
これは期待どおりに動作します。つまり、"A" メンバー関数にアクセスでき、fooresult は 1 を返します。ただし、unittest 関数の最後でオブジェクトが削除されると、例外がスローされます。
System.AccessViolationException: 保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています
Current() 関数の戻り値の型を次のように変更すると:
その後、すべて問題なく、単体テストはアクセス違反なしで終了します。最初の Current() 実装の何が問題だったのか誰か教えてもらえますか? ありがとう、ブーシェ。