問題タブ [multiple-inheritance]
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++ - インターフェイス`ISingleton`を抽象化して基本クラスにする
3つのインターフェイスクラスIVideo , IAudio , IGPIO
と、それらのインターフェイスを実装する他の3つのクラスがありますVideo_impl , Audio_impl , GPIO_impl
。
これまでのところ、物事は単純です。
しかし、私はそれらすべてのオブジェクトをシングルトンにしたいのです。質問は次のとおりです。
(または?)がインターフェイスから継承できるISingleton
ように、インターフェイスを抽象化することをお勧めしますか?Video_impl , Audio_impl , GPIO_impl
IVideo , IAudio , IGPIO
次のように実装することを考えていました。お勧めですか?もっと良い方法があるに違いないと思います。
php - マジック関数と継承
(PHP を使用して) 別のマジック オブジェクトを拡張するマジック オブジェクトを作成できるかどうかを知りたいです。
c# - ここでコードの重複をどのように除外できますか?
それで、皆さんがこれについてどう思うか聞いてみたいです。
3つの異なる継承パスがすべて別の基本クラスを実装する必要があるプロジェクトがあります。これは多重継承であり、C#では許可されていません。コードを重複させずにこれを実装する方法に興味があります。
編集:私は3つのクラスを所有していません。3つのクラスは、サードパーティのコードからのものです。したがって、それらすべてに基本クラスを拡張させることはできません。
現在、私は3つの異なるクラスを使用しており、それぞれが異なる基本クラスを拡張しています。次に、3つの抽象クラスのそれぞれに同じコードがあります。
単一のインターフェースを使用することもできますが、それでもコードを複製する必要があります。
コードを実装するある種の静的クラスを作成し、それを3つの抽象クラスのそれぞれで参照することができます。重複をなくすことができますが、どう思うかわかりません。インターフェイスにExtensionsメソッドを実装することはできますが、インターフェイス自体が空になり、拡張メソッド(重複コードを含む)がまったく異なるファイルに含まれるため、正しくないようです。さらに、拡張メソッドにプロパティを実装できません...
ここでコードの重複をどのように除外できますか?
編集、継承ツリー:
上記の各クラスに入れたいコードがありますが、3rdPartyClassesに追加できません。
php - PHP、親オブジェクトの作成方法
とにかくphpで親オブジェクトを作成できるかどうか知りたいのですが、これを試しました:
しかし、それは機能せず、phpログに次のエラーが表示されます。
(..)PHP解析エラー:構文エラー、予期しないT_STRING、T_VARIABLEまたは'$'(..)が必要です
nhibernate - 複数の継承クラスを格納するデータベース構造
私は 2 つの異なる (継承なし) インターフェイスを持っています:
IInvestable
andIPricable
と 2 つのクラス:
IndexClass
andFundClass
は、DB の別のテーブルに格納されています。
IndexClass
ははおよび。IPriceable
FundClass
_IPriceable
IInvestable
に対する価格を格納するテーブルが必要でIndexClass
あり、投資されFundClass
ている格納するテーブルが必要です。FundClasses
1 つの方法は、2 つのテーブルを作成することです:Pricable
およびInvestable
ID 列だけを持つテーブルです。
次に、外部キーをIndexClass
:とPricableID
に 2 つの外部キーも設定しFundClass
ます。PricableID
InvestableID
次に、私の価格は単純に にリンクし、PricableID
私の投資は単純に にリンクしInvestmentID
ます。これらは一意であるためです。
別の方法として、Price テーブルに列を作成することもできFundClassID
ますIndexClassID
が、これはスケーラブルではないようで、操作が難しいようです。
それから NHibernate にそれを理解させてください。
多重継承を保存するための推奨事項をインターネット上で実際に見つけることができず、誰かがこれについて何かアイデアを持っているか、過去に同様のことに取り組んだことがあるかどうか疑問に思いましたか?
ありがとう
ストゥ
.net - 個別または組み合わせ可能なドメインエンティティの継承/設計の問題
単独で使用したり、集合体に結合したりできるドメインエンティティのロードを実現するために必要なインターフェイスと抽象を設計しようとすると、完全に混乱しました。わお。それは一口の流行語でした。基本的に、基本タイプの「ロード」機能が必要な2つのオブジェクトがありますが、これら2つのオブジェクトを1つに組み合わせると、多重継承に遭遇します。
だから、私はこのような私のエンティティを持っています(私は描くでしょう
次に、次のようなインターフェイスがあります。
アカウントとドキュメントの両方が他のエンティティから派生する可能性がある(そして派生している)ので、DRYに従うように、実装に基本機能を提供したいと思います。
これは、個々のAccountオブジェクトとDocumentオブジェクト、およびそれらの派生に対しては正常に機能しますが、頭を悩ませることができない問題は、AccountDocumentの処理方法です...
解決策はそれほど難しいものではないことはわかっていますが、私は完全に絡み合っており、基本の「ロード」機能を1回だけ提供する方法を明確にすることはできません。助けてください!
前もって感謝します。
java - 複数のインターフェースを実装するためにJavaでメソッド引数を要求するにはどうすればよいですか?
Java でこれを行うことは合法です。
どうすればこれを行うことができますか (構文は合法ではありません):
可能であれば、特定のタイプを必要とせずに、呼び出し元に追加可能とクローズ可能の両方のオブジェクトを使用するように強制したいと思います。BufferedWriter、PrintStream など、これを行う複数の標準クラスがあります。
独自のインターフェースを定義する場合
Appendable と Closeable を実装する標準クラスは私のインターフェイス AppendableAndCloseable を実装していないため、これは機能しません (私が思っているほど Java を理解していない場合を除きます...空のインターフェイスは、スーパーインターフェイスの上とそれを超えて一意性を追加します)。
私が考えることができる最も近いのは、次のいずれかを行うことです。
1 つのインターフェイス (例: 追加可能) を選択し、実行時テストを使用して引数が
instanceof
他のものであることを確認します。欠点: コンパイル時に問題が検出されない。複数の引数が必要です (コンパイル時の正確さをキャッチしますが、見た目はおかしくなります):
/li>
c++ - C++での多重継承のジレンマ
私のC++ライブラリの設計で問題に直面しています。これは、他の「ストリーム」実装では見つけられなかった機能をサポートするストリームを読み取るためのライブラリです。なぜ私がそれを書き始めることにしたのかはそれほど重要ではありません。重要なのは、多重継承を通じて2つの重要な動作を提供するストリームクラスがあるということです。共有可能性とシーク可能性です。
共有可能なストリームとは、親ストリームとリソースを共有する新しいストリームを返すshareBlock(size_t length)メソッドを持つストリームです(たとえば、親ストリームで使用されるのと同じメモリブロックを使用します)。シーク可能なストリームとは、シーク可能なストリームです。メソッドseek()を介して、これらのクラスはストリーム内の特定のポイントをシークできます。ライブラリのすべてのストリームが共有可能および/またはシーク可能であるとは限りません。
リソースのシークと共有の両方の実装を提供するストリームクラスは、SeekableおよびShareableと呼ばれるインターフェイスクラスを継承します。そのようなストリームのタイプを知っていればそれはすべて良いことですが、実際にどのストリームクラスに関係なく、同時にシーク可能で共有可能であるという品質を単に満たすストリームを引数として受け入れる関数が必要な場合がありますは。SeekableとShareableの両方を継承するさらに別のクラスを作成し、そのタイプへの参照を取得することはできますが、シーク可能で共有可能なクラスをそのクラスから継承する必要があります。このような「動作クラス」をさらに追加する場合は、コードのいたるところにいくつかの変更を加える必要があり、すぐに保守不可能なコードになります。このジレンマを解決する方法はありますか?そうでなければ、私は」m多重継承に人々が満足しない理由を、絶対に理解するようになります。それほとんど仕事をしますが、ちょうどその時、それはしません:D
どんな助けでも大歓迎です。
--2回目の編集、推奨される問題解決-
最初は、マナグの解決策が私の好みの解決策になると思いました。しかし、Matthieu M.には、Managuよりも私が好んだ別のものが付属していましたboost::enable_if<>
。BOOST_MPL_ASSERT
生成されたメッセージがそれほど気味が悪い場合は、Managuのソリューションを使用したいと思います。有益なコンパイル時エラーメッセージを作成する方法があれば、私は確かにその方法を実行します。しかし、私が言ったように、利用可能なメソッドは不気味なメッセージを生成します。boost::enable_if<>
ですから、条件が満たされない場合に生成される(はるかに)あまり有益ではないが、よりクリーンなメッセージを好みます。
選択したクラスタイプを継承する引数を取るテンプレート関数を作成するタスクを簡単にするために、いくつかのマクロを作成しました。
ご覧のとおり、エラーメッセージは非常にクリーンです(少なくともGCC 3.4.5では)。しかし、誤解を招く可能性があります。間違った引数タイプを渡したことは通知されません。関数が存在しないことを通知します(実際、SFINAEが原因ではありませんが、ユーザーには正確に明確でない場合があります)。randomStuff ... ************** garbage **************
BOOST_MPL_ASSERT
それでも、私はそれらの生成物よりもそれらのクリーンなメッセージを好みます。
このコードにバグを見つけた場合は、それらを編集して修正するか、その点についてコメントを投稿してください。これらのマクロで私が見つけた1つの大きな問題は、それらがBoost.Preprocessorの制限に制限されていることです。ここでは、たとえば、に渡すことができるのDerivationsArray
は最大4つのアイテムのみSONETTO_ENABLE_IF_DERIVED()
です。ただし、これらの制限は構成可能であり、今後のC++1x標準でも解除される可能性がありますね。間違っていたら訂正してください。彼らがプリプロセッサへの変更を提案したかどうかは覚えていません。
ありがとうございました。
c++ - 仮想派生クラスのメンバー/メソッドへのアクセス
ここの例は意味がありませんが、これは基本的に私が Python でプログラムを書いた方法であり、現在は C++ で書き直しています。私はまだ C++ での多重継承を把握しようとしています。ここで行う必要があるのは、C のインスタンスを介して main から A::a_print にアクセスすることです。以下に、私が話していることを示します。これは可能ですか?
ここにコンパイルエラーがあります。
c++ - C++ Abstract base class array of ptrs to ptrs
I have an abstract base class (Comparable) with Date and Time virtually inheriting from it and a DateTime class v-inheriting from Date and Time.
My problem is this: I was tasked with dynamically allocating an array of Comparables.
#xA;I then populate the array with DateTimes in alternating order. I need to sort this array using a quicksort and bubblesort combination. Bubble if length < 8. Comparable** from and Comparable ** to are the only parameters I'm allowed to use.
But I'm completely stuck. At this point it isn't worth pasting in the code I have due to it's frantic haphazardness.
Any help would be greatly appreciated. I've spent the past few hours trying to finish this up, only have sorting left in my project. Which is due tomorrow late morning.
Thanks in advance, Joel
EDIT:
#xA;I was given the above to use as my arraySort.h
I'm using: int aSize = _msize(a) / sizeof(Comparable) - 1;
as my length variable... which I have to calculate instead of passing it, which is kind of annoying.
I'm mainly just having headaches over dereferencing the ** and calling it's lessThan or equals method in quicksort. Once I understand how to do a quicksort with it'll 'click' and I'll be able to easily to bubble sort.
EDIT: I currently have the following as my bubble sort, it doesn't sort the array at all.
#xA;