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

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

c++ - 「奇妙に繰り返されるテンプレートパターン」の実用的な使い方

「 Curiously Recurring Template Pattern 」の実用的な用途は何ですか? 一般的に示されている「カウントされたクラス」の例は、私にとって説得力のある例ではありません。

0 投票する
7 に答える
23798 参照

java - Java列挙型定義

私は Java ジェネリックをかなりよく理解していると思っていましたが、java.lang.Enum に次のような記述がありました。

誰かがこの型パラメータを解釈する方法を説明できますか? 同様の型パラメーターを使用できる場所の他の例を提供するためのボーナスポイント。

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

c++ - 動的ポリモーフィズムを回避する CRTP

C++ で CRTP を使用して、仮想メンバー関数のオーバーヘッドを回避するにはどうすればよいですか?

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

c++ - 不完全なタイプの無効な使用

プロジェクトでサブクラスのtypedefを使用しようとしていますが、以下の例で問題を特定しました。

誰かが私がどこで間違っているのか知っていますか?

これは私が得る出力です:

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

c++ - C++ CRTP の問題、MSVC エラー C2039

MSVC 2008 はこのコードをコンパイルしません:

表示されるエラーは、「エラー C2039: 'type' : is not a member of 'D'」です。何か案は?

0 投票する
6 に答える
2486 参照

c++ - ここで不思議なことに繰り返されるテンプレートパターン(C ++)を使用できますか?

私は次のようなものに単純化できるC++アプリケーションを持っています:

私のアプリケーションはパフォーマンスが重要です。コレクションには通常、何千ものウィジェットがあります。AbstractWidget(数十ある)から派生したクラスは、通常、仮想関数の多くをオーバーライドしないままにします。オーバーライドされるものは、通常、非常に高速な実装になります。

これを考えると、いくつかの巧妙なメタプログラミングでシステムを最適化できると思います。目標は、コードを管理しやすくしながら、関数のインライン化を活用し、仮想関数の呼び出しを回避することです。不思議なことに繰り返されるテンプレートパターンを調べました(説明については、ここを参照してください)。これは私が望むことをほぼ実行しているようですが、完全ではありません。

ここでCRTPを機能させる方法はありますか?または、誰かが考えることができる他の賢い解決策はありますか?

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

c++ - すべての派生型のクラス テンプレートを部分的に特殊化する方法は?

std::tr1::hash変更できない既存のテンプレート ( ) を基本クラスとすべての派生クラスに部分的に特化したいと考えています。その理由は、ポリモーフィズムに奇妙に繰り返されるテンプレート パターンを使用しており、ハッシュ関数が CRTP 基底クラスに実装されているためです。CRTP 基底クラスに部分的に特化したい場合は簡単です。次のように書くだけです。

しかし、この特殊化は実際の派生クラスとは一致せず、CRTPBase<Derived>. 私が欲しいのは、Derivedそれがから派生した場合にのみ、部分的な特殊化を書く方法ですCRTPBase<Derived>。私の疑似コードは

...しかし、コンパイラはそれenable_if<condition, Derived>::typeDerived. を変更できる場合は、ドキュメントで推奨されているように、std::tr1::hash使用する別のダミー テンプレート パラメータを追加するだけですが、それは明らかにあまり良い解決策ではありません。この問題を回避する方法はありますか? 作成するたびにカスタム ハッシュ テンプレートを指定する必要がありますか、それとも派生クラスごとに完全に特化する必要がありますか?boost::enable_ifenable_ifunordered_setunordered_maphash

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

java - JavaでCRTPにキャストする方法は?

基本的な一般的な割り当てを行う非常に単純なケースがあります。

しかし、Enum.valueOf()を呼び出すのは少し難しいです。私の場合、エラーは次のとおりです。

java.lang.Enum の valueOf(java.lang.Class,java.lang.String) は (java.lang.Class,java.lang.String) には適用できません

type が であるため、これは完全に理にかなっていClass<Object>ます。しかし、EnumCRTP であるため、型をキャストしてコンパイラを満足させる良い方法が見つかりません。生の型を使用することEnum.valueOf((Class)type, example))が唯一の答えですか? 1つだけではなく2つの警告が表示されます。

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

java - javaの列挙型とジェネリックメソッド

Javaジェネリックシステムのいくつかのコーナーケースでまだ問題があります。

私はこの方法を持っています(私は署名にのみ興味があります):

(実装が時々 EnumSet を抽出し、実装が JComboBox などを抽出するインターフェースについて考えてみてください。)

実行時に取得したクラスで呼び出したいので、次のように呼び出します。

奇妙なエラーメッセージが表示されます:互換性のないタイプが見つかりました:java.lang.Object required:RETURN_TYPE

タイプの「t」の前で、呼び出しの開始ブラケットの直後の場合のメッセージの場所。

非ジェネリックなコンテキストから呼び出すと、動作します:

誰かがこの問題の説明と解決策を持っていますか?

これで遊びたい人のための完全なファイルは次のとおりです。

前もって感謝します、

ニコ

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

c++ - テンプレート パラメーターから継承し、C++ でアップキャストする

私は VS2008 でこのコードを使用しようとしました (そして、サンプルにあまりにも多くのコンテキストが含まれている可能性があります...):

これは期待どおりに動作します。つまり、"A" メンバー関数にアクセスでき、fooresult は 1 を返します。ただし、unittest 関数の最後でオブジェクトが削除されると、例外がスローされます。

System.AccessViolationException: 保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています

Current() 関数の戻り値の型を次のように変更すると:

その後、すべて問題なく、単体テストはアクセス違反なしで終了します。最初の Current() 実装の何が問題だったのか誰か教えてもらえますか? ありがとう、ブーシェ。