問題タブ [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 に答える
862 参照

c++ - C++エラー列挙型とCRTP

errro:エラーC2039:'BROKER':broker_def::brokerDisTradableのメンバーではありません'

何か案が?

ありがとう!

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

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 からのオーバーヘッドは、ごくわずかですが、実際にはこのアプリケーションに違いをもたらします。

現在持っているものを修正する方法はありますか、またはこの問題を解決するためのより良い解決策はありますか?

ありがとう。

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

c++ - タイプがCRTP基本クラスから派生しているかどうかの判別

型が特定のCRTP基本クラスから派生しているかどうかを判断するためis_fooに、で使用できる関数を作成しようとしています。enable_if以下のコードは、is_foo関数を実装するための私の試みですが、実際には機能しません。誰かがそれを修正するために何を変更する必要があるか教えてもらえますか?

ありがとう。

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

c++ - C++: CRTP では、派生クラスで定義されたクラスは基本クラスでアクセスできません

(簡略化された)基本クラスは次のとおりです。

そして、ここに派生があります:

ThisWontCompile::DataからSharedObjectにアクセスするための回避策はありますか? ベースオブジェクトから派生したオブジェクトで何ができて、何ができないのでしょうか?

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

c++ - 「奇妙に繰り返されるテンプレートパターン」を使用した増分番号

class Address作成時にフィールドaddrを一意の値に初期化する を実装したいと思います。Addressこの値は、インスタンスを作成するたびに 1 ずつ増加する必要があります。

例を挙げましょう。次のコードが実行された後:

x.addrは 1 であるy.addr必要がありますが、2 である必要があります。

それを達成するために、Curiously Recurring Template Patternを考えていました。それは実現可能でしょうか?また、同じ動作を実現するためのより簡単な方法はありますか?

TIA、ジル

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

c++ - 不思議なことに繰り返されるテンプレート?

Curiously Recurring Templates が非常にうまく機能するという問題がありますが、簡単なテストを通過することさえできません。

これにより、エラーが発生します

何が欠けていますか。

g++ 4.2.1 でコンパイル

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

c++ - 型パラメーターを追加して Curiously Recurring Template Pattern (CRTP) を使用する

Curiously Recurring Template Pattern (CRTP) を使用して、追加の型パラメーターを提供しようとしています。

これはおそらくバグであり、より適切なスーパークラスがありますBase<A, double, int>-- ただし、この引数の順序の不一致はそれほど明白ではありません。このバグは、typedef 内のパラメーターの意味に name を使用できれば、簡単に確認できます。

ただし、これは gcc 4.4 ではコンパイルされません。報告されたエラーは上記のコメントとして示されています。その理由は、A を作成する前に Base テンプレートをインスタンス化する必要があるためだと思いますが、これには A を知る必要があります。

CRTP の使用中に「名前付き」テンプレート パラメータを渡す良い方法はありますか?

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

c++ - C++03 でのレイト バインド インターフェイスの設計パターン

クラスをインターフェイスの実装として使用したい場合がありますが、コードを変更したり、このクラスをカプセル化したりできません (派生など)。他の状況では、そのような状況を回避したい場合があります。// 次の例では、コードを変更できない次の「封印された」クラスがあると仮定します。

基本的に 2 種類のデザイン パターンから選択できます。 1.) インターフェイスのメンバー オブジェクトとしての実装。

C++03 テンプレートの機能により、これはかなり型安全です。多くのコンパイラは、実際に呼び出された「実装」のメンバー関数をインライン化します - 残念ながら、すべてのコンパイラではありません。場合によっては、不要な呼び出しに対処する必要があります。

2.) ベースから派生せずに CRTP パターンを使用する。

ええ、私は知っています: それは CRTP パターンが使用される通常の方法ではありません。通常、次のように定義します。

残念ながら、これはできません。実装クラスのコードは変更できないことに注意してください。私のバージョンの CRTP パターンで my_interface1 を使用して正確に何が起こっているか考えてみましょう。プログラミング言語 C++03 の理論上、派生クラス ポインターを基本クラスの 1 つにキャストしても安全です。一方、反対方向 (ベースから派生) にキャストしたり、まったく異なる型にキャストしたりすることは安全ではありません。メモリ オブジェクトが基本クラスと派生クラスに必要な数のバイトを予約しているという保証はありません。しかし、実際には、インターフェイスにはメンバーが含まれていないため、これはこの例には属しません。したがって、サイズは 0 バイトです (クラスが空の場合でも、演算子 new は少なくとも 1 バイトを割り当てることに注意してください)。この場合は' s - 実際には、任意の型ポインタを 'my_interface1 ポインタにキャストしても安全です。決定的な利点は、ほとんどすべてのコンパイラが実際に呼び出されたメンバー関数への呼び出しをインライン化することです。

では、ベストプラクティスは何だと思いますか? よろしくお願いします。

0 投票する
4 に答える
189 参照

java - メソッドを「return this」として宣言する良い方法はありますか?

このようなもの:

Java 6 では不可能であることはわかっているので、Java 7 でそれができるかどうかを知りたいです。

編集

これは、メソッド呼び出しをチェーンするのに役立ち、次のように一時的なローカル変数を作成しないようにする必要があります。

などなど。

この関数をコンパイラに追加するのは非常に簡単だと思いますが、おそらくopenjdkまたはgcjにハックする必要がありますか?

ところで、openjdk の再構築に成功したことはありません。

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

c++ - テンプレート化されたクラスにXという名前のクラステンプレートがありません

この(CRTPのような)コードをGCC 4.6.0でコンパイルしようとすると:

「test.cpp:3:26:エラー:「structB<int>」に「X」という名前のクラステンプレートがありません」というエラーメッセージが表示されます。Xがクラス定義の外で見えないように見えるのはなぜですか?