Iは、本質的にコンテナであるC++クラスを持っている:C++:派生インスタンスを 'extends?'で作成します。ベースインスタンス/実装ダウンキャスト?
SimpleContainer
に加え
class SimpleContainer {
public:
// Various accessor methods/iterators
private:
// The actual content
}
- 私はコンテンツにルールを適用するが、同じコンテンツを使用して、意味的SimpleContainer
を拡張StrictContainer
作成します既存のSimpleContainer
インスタンス。
class StrictContainer : public SimpleContainer {
StrictContainer(const SimpleContainer& simple) {
// Check content in simple, and raise an exception
// if it is not valid.
}
}
- 私の問題はSimpleContainer
とStrictContainer
の間があるべき関係の種類である:
がある-: は自然なようです。それは私が継承で示したものですが、次にSimpleContainer
インスタンスの構築を拡張することに基づいてStrictContainer
インスタンスを作成します - それは可能ですか?
はまた がStrictContainer
がSimpleContainer
部材を有する関係-ているように私はそれを実装することができ、持っているが、その後、私はStrictContainer
で再びすべてのアクセサとイテレータを実装しに転送する必要があります実装はSimpleContainer
です。
コンテナはかなりです。 StrictContainer
を作成するときは、コンテンツを実際にコピーしません。 downcast<StrictContainer>
がsimple
入力引数の内容を確認するためにStrictContainer
上のメソッドを呼び出すと
SimpleContainer simple;
// Fill simpleContainer
{
StrictContainer* strict = downcast<StrictContainer>(simple)
...
}
:私は自分のダウンキャスト演算子を実装するための方法だった私が望む何を思いますか?
デバッグのために 'StrictContainer'を使用する場合、または' operator [] 'や' at 'のような関係をベクトルで使用する場合は、 – fghj
は、なぜあなたはクラス 'StrictContainer'が必要なのでしょうか?あなたの説明から、それは 'SimpleContainer'のバリデータとしてのみ機能するようです。私には簡単な関数呼び出しとして聞こえます。 – 4386427
ほとんどのコンテナは移動可能ですので、 'SimpleContainer'を' StrictContainer'に移動してコピーを避けることができます。 –