問題タブ [static-polymorphism]

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 投票する
2 に答える
1119 参照

c++ - C++ には、vtable を使用しないインターフェイスの静的ポリモーフィズム実装がありますか?

C++ には、vtable を使用しないインターフェイスの適切な実装がありますか?

例えば

最後の行の func への呼び出しは、vtable に移動して BaseInterfaceImpl::func の func ptr を見つけますが、BaseInterfaceImpl は純粋なインターフェイス クラス BaseInterface 以外の他のクラスからサブクラス化されていないため、直接それを行う C++ の方法はありますか?

ありがとう。ギル。

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

c++ - 派生クラスをテンプレート パラメーターとして使用するのは何ですか?

このパターンの目的は何ですか? それはなんと呼ばれていますか?初めて見たときはとても奇妙に見えましたが、今では何度も見ています。

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

php - PHP: ポリモーフィックな抽象静的メソッド

私はこのようなことをしようとしていますが、成功しません。

ありがとう!

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

c++ - 静的ポリモーフィズムの定義と実装

私は、私が聞いている静的な多発性麻痺の概念についていくつか質問があります。それらは主にC++のコンテキストで解釈できますが、該当する場合は言語に依存しない回答をいただければ幸いです(したがって、C ++と言語に依存しない両方にタグを付けます)。

  1. 一般的に静的ポリモーフィズムをどのように定義しますか?例として、C ++の関数は、イテレータのように動作するstd::sortオブジェクトによって提供されるインターフェイスに依存し、提供されたイテレータのインターフェイスでの正確な動作はコンパイル時に決定できるため、静的にポリモーフィックと見なされると思います。この説明は、静的ポリモーフィズムを定義する方法ですか、それとも特定のケースの説明であり、それ以上のものがありますか?

  2. C ++で静的ポリモーフィズムを使用する一般的なコードパターンは何ですか?また:SPはC ++のテンプレートを介してのみ達成されますか?

  3. 特定のUMLクラス図は、ポリモーフィズムがどのように処理されるかを直接記述していないため、静的または動的に少なくとも部分的に実装できるというのは本当ですか?言い換えれば、静的ポリモーフィズムと動的ポリモーフィズムの選択は、OOPモデルとは無関係であり、したがって、実装者が決定する必要がありますか?

  4. 静的ポリモーフィズムはC++固有であり、テンプレートの動作に関連していますか?そうでない場合は、C ++以外の他の主流言語に存在しますか?Java、C#..で静的ポリモーフィズムに相当するものを使用できますか?それは何らかの利点をもたらしますか?

  5. 最も重要なのは...静的ポリモーフィズムを使用することの実際の利点は何ですか?コードの柔軟性が低下することに同意できると思います。-C ++の場合-1つのポインター逆参照(仮想関数/関数へのポインター/デリゲートコスト)を節約する以外に、どのような利点がありますか?静的ポリモーフィズムが特に役立つ問題のクラスは何ですか?実装の正しい選択ですか?

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

list - Haskell に異種のリストがないのはなぜですか

Haskellのようなリストを作成できない理由がわかりません[1,"1",1.1]。邪魔になるのは静的型付けではないと思います。なぜなら、それheadは今では不適切に定義された型を持つと思ったからですhead。 list が入力されるため、head [1,"1",1.1]asList->Intおよびas とhead (tail [1,"1",1.1])入力されList->Stringます。ランタイムはすでに多くの簿記を行っているのに、さまざまなプレリュード関数のより洗練されたポリモーフィック (またはジェネリック) バージョンを提供しないのはなぜですか? ここで何が欠けていますか?

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

c++ - 静的テンプレート クラスのアドバイス

この問題があります(ヒストグラム)。私は実際のスペースを持っています:[a,b]何らかの方法で分割されています ( [a0=a, a1, a2, ..., b])。パーティショニングは、等間隔 ( a1 - a0 = a2 - a1 = ...) または変数で行うことができます。

これを処理するクラスが必要です。それが属するパーティションのビンの値を指定して、いくつかのメソッドを使用します。特定のビンなどの中心を見つける他の方法。

プログラム中に、次のような単純な関数を呼び出すためだけにクラスをインスタンス化するのは好きではありません

だから私はそのようなことをするためにテンプレートを使って静的クラスを書こうとしました:

それは良い考えですか?それを行う他の方法はありますか?今、私は次のような無料の機能を持っています

しかし、エラーが発生しやすいと思います。

ここで私の実装:

  1. それは良い実装/設計ですか?
  2. nを使用してフィールドを回避する方法はありstd::vectorますか? どのように?
  3. をパラメータ化する方法はあり0.025ますか? doubleテンプレートパラメータにできないことはわかっていますが、次のようなものを書くことはできますか:

    /li>
  4. その他/アドバイス?

編集:

3番目のポイントについてなぜ私はそれができないのか:

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

c++ - 関数テンプレートをポリモーフィック関数オブジェクトに適合させる一般的な方法はありますか?

たとえば、いくつかの関数テンプレートがあります

そして、私はそれぞれをさまざまなタイプで呼び出すアルゴリズムに渡す必要があります。

some_algorithm関数テンプレートをインスタンス化せずに渡すことはできませんが、いくつかの異なる型の引数を使用して呼び出す必要があるため、特定の型でインスタンス化することもできません。

関数テンプレートを多形関数オブジェクトに適合させることができます。

次に、それをとして渡しますsome_algorithm(foo_polymorphic())。ただし、これには、関数テンプレートごとに個別のアダプターを作成する必要があります。

関数テンプレートをポリモーフィック関数オブジェクトに適応させる一般的な方法はありますか?つまり、それぞれに個別に何かを宣言することなく、適応する必要のある関数テンプレートごとに再利用できるメカニズムはありますか?

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

c++ - this と継承への参照を返す

シンタックス シュガーについては、 への参照を返したいのですthisが、継承されると、関数は子クラスの型を返す必要があります。

演算子のせいで、ポインタを返して dynamic_cast することはできません。参照でなければなりません。

それは可能ですか?decltype(*this)for T の使用は機能せず、どちらも機能しません (自動の場合、auto f()->decltype(*this)理由thisはわかりませんが)

Scala では、次のように記述できます。

しかし、私の g++ はこれを受け入れません (それがバグなのか、仕様にないだけなのかわかりませんか?)

もちろん明示的な方法もありますが、C++11の機能を使えば回避できるのではないでしょうか?

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

scala - Scala の型推論は、それらが何であれ、これらの型が同一であることに注意できません。

ここにオブジェクト ジェネレーター (MorselGenerator とその子) がある設計パターンがあります。そのインスタンスは常に同じ正確な型のオブジェクト (Morsels とその子) を生成しますが、型チェッカーでは操作を実行できません。これらの生成されたオブジェクトの 2 つ以上が、異なる可能性があると信じています。

これをタイプチェッカーを通過させるにはどうすればよいですか?

コンパイラは次のコンパイル エラーを生成します


アップデート

これは、私がやろうとしていることと多かれ少なかれ同等の C++ コードです。eatTwo 関数は完全にポリモーフィックであり、Morsel または MorselGenerator の特定の派生型を参照しないことに注意してください。

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

design-patterns - なぜAbstractFactoryUnitは静的ポリモーフィズムではなく動的ポリモーフィズムを持っているのですか?

私は現在、最新の C++ を学習し、抽象ファクトリに焦点を当てているところです。私が理解していることから、Loki の主なアイデアの 1 つは、GoF で使用される「仮想」(ダイナミクス ポリモーフィズム) を回避することです。しかし、時々、それはまだ使用されています。抽象ファクトリの章で、AbstractFactoryUnit に「virtual」があります。http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markupこれまで読んだことから、それを回避する方法があります。http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism

この場合、仮想を使用する方が効果的なのはなぜですか?