問題タブ [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++ - C++エラー列挙型とCRTP
errro:エラーC2039:'BROKER':broker_def::brokerDisTradableのメンバーではありません'
何か案が?
ありがとう!
c++ - CRTP 基本クラスで指定された後期リターンで decltype を使用する
CRTP 基本クラスのメンバー関数の指定された後期リターンで decltype を使用しようとしていますが、次のエラーが発生していますinvalid use of incomplete type const struct AnyOp<main()::<lambda(int)> >
。
私は基本的に、すべての sfinae ボイラー プレートを基本クラスに移動しようとしているので、作成する操作ごとに繰り返す必要はありません (現在、各操作には 6 つの異なる呼び出しがあり、約 50 の操作があるため、かなりの量がありますenable_if を何度も繰り返します)。
オーバーロードに依存するソリューションを試しましたが、渡される可能性のある型の 1 つは、std にバインドされた呼び出し可能なもの (これは C++03 または C++0x ラムダの通常のファンクターである可能性があります) です。 :function 残念ながら、std::function からのオーバーヘッドは、ごくわずかですが、実際にはこのアプリケーションに違いをもたらします。
現在持っているものを修正する方法はありますか、またはこの問題を解決するためのより良い解決策はありますか?
ありがとう。
c++ - タイプがCRTP基本クラスから派生しているかどうかの判別
型が特定のCRTP基本クラスから派生しているかどうかを判断するためis_foo
に、で使用できる関数を作成しようとしています。enable_if
以下のコードは、is_foo
関数を実装するための私の試みですが、実際には機能しません。誰かがそれを修正するために何を変更する必要があるか教えてもらえますか?
ありがとう。
c++ - C++: CRTP では、派生クラスで定義されたクラスは基本クラスでアクセスできません
(簡略化された)基本クラスは次のとおりです。
そして、ここに派生があります:
ThisWontCompile::DataからSharedObjectにアクセスするための回避策はありますか? ベースオブジェクトから派生したオブジェクトで何ができて、何ができないのでしょうか?
c++ - 「奇妙に繰り返されるテンプレートパターン」を使用した増分番号
class Address
作成時にフィールドaddr
を一意の値に初期化する を実装したいと思います。Address
この値は、インスタンスを作成するたびに 1 ずつ増加する必要があります。
例を挙げましょう。次のコードが実行された後:
x.addr
は 1 であるy.addr
必要がありますが、2 である必要があります。
それを達成するために、Curiously Recurring Template Patternを考えていました。それは実現可能でしょうか?また、同じ動作を実現するためのより簡単な方法はありますか?
TIA、ジル
c++ - 不思議なことに繰り返されるテンプレート?
Curiously Recurring Templates が非常にうまく機能するという問題がありますが、簡単なテストを通過することさえできません。
これにより、エラーが発生します
何が欠けていますか。
g++ 4.2.1 でコンパイル
c++ - 型パラメーターを追加して Curiously Recurring Template Pattern (CRTP) を使用する
Curiously Recurring Template Pattern (CRTP) を使用して、追加の型パラメーターを提供しようとしています。
これはおそらくバグであり、より適切なスーパークラスがありますBase<A, double, int>
-- ただし、この引数の順序の不一致はそれほど明白ではありません。このバグは、typedef 内のパラメーターの意味に name を使用できれば、簡単に確認できます。
ただし、これは gcc 4.4 ではコンパイルされません。報告されたエラーは上記のコメントとして示されています。その理由は、A を作成する前に Base テンプレートをインスタンス化する必要があるためだと思いますが、これには A を知る必要があります。
CRTP の使用中に「名前付き」テンプレート パラメータを渡す良い方法はありますか?
c++ - C++03 でのレイト バインド インターフェイスの設計パターン
クラスをインターフェイスの実装として使用したい場合がありますが、コードを変更したり、このクラスをカプセル化したりできません (派生など)。他の状況では、そのような状況を回避したい場合があります。// 次の例では、コードを変更できない次の「封印された」クラスがあると仮定します。
基本的に 2 種類のデザイン パターンから選択できます。 1.) インターフェイスのメンバー オブジェクトとしての実装。
C++03 テンプレートの機能により、これはかなり型安全です。多くのコンパイラは、実際に呼び出された「実装」のメンバー関数をインライン化します - 残念ながら、すべてのコンパイラではありません。場合によっては、不要な呼び出しに対処する必要があります。
2.) ベースから派生せずに CRTP パターンを使用する。
ええ、私は知っています: それは CRTP パターンが使用される通常の方法ではありません。通常、次のように定義します。
残念ながら、これはできません。実装クラスのコードは変更できないことに注意してください。私のバージョンの CRTP パターンで my_interface1 を使用して正確に何が起こっているか考えてみましょう。プログラミング言語 C++03 の理論上、派生クラス ポインターを基本クラスの 1 つにキャストしても安全です。一方、反対方向 (ベースから派生) にキャストしたり、まったく異なる型にキャストしたりすることは安全ではありません。メモリ オブジェクトが基本クラスと派生クラスに必要な数のバイトを予約しているという保証はありません。しかし、実際には、インターフェイスにはメンバーが含まれていないため、これはこの例には属しません。したがって、サイズは 0 バイトです (クラスが空の場合でも、演算子 new は少なくとも 1 バイトを割り当てることに注意してください)。この場合は' s - 実際には、任意の型ポインタを 'my_interface1 ポインタにキャストしても安全です。決定的な利点は、ほとんどすべてのコンパイラが実際に呼び出されたメンバー関数への呼び出しをインライン化することです。
では、ベストプラクティスは何だと思いますか? よろしくお願いします。
java - メソッドを「return this」として宣言する良い方法はありますか?
このようなもの:
Java 6 では不可能であることはわかっているので、Java 7 でそれができるかどうかを知りたいです。
編集
これは、メソッド呼び出しをチェーンするのに役立ち、次のように一時的なローカル変数を作成しないようにする必要があります。
などなど。
この関数をコンパイラに追加するのは非常に簡単だと思いますが、おそらくopenjdkまたはgcjにハックする必要がありますか?
ところで、openjdk の再構築に成功したことはありません。
c++ - テンプレート化されたクラスにXという名前のクラステンプレートがありません
この(CRTPのような)コードをGCC 4.6.0でコンパイルしようとすると:
「test.cpp:3:26:エラー:「structB<int>」に「X」という名前のクラステンプレートがありません」というエラーメッセージが表示されます。Xがクラス定義の外で見えないように見えるのはなぜですか?