0

これはおそらく味に関するものです。

このようなもの:

class A:public vector<int>{};

class B:public vector<A>{
};

class C{
public:
vector<B> cs;
};

今私が実装したいのAは、 のオブジェクトを受け取る関数ですC。このようなもの:

class A:vector<int>{
void foo( C &c);
};

CニーズBBニーズAを完全に宣言する必要があるため、これは不可能です。次に、2 つのオプションが表示されます。

1) foo をそのようにします:void foo(void *c);そして実装 (A.cpp 内) でキャストを行います。これの問題は、本当にいいことでもきれいなことでもなく、他の開発者を少し混乱させます。

2)私が取り組んでいる名前空間でオブジェクトを作成します。これは、SOLID の原則、特に単一責任の原則に違反しています。

たぶん、私には見えない、不便ではない第 3 の方法があります。より正確な用量の形式があるかどうか、誰でも教えてもらえますか?

4

2 に答える 2

2

あなたの問題が見えているかどうかわかりません。問題ありません:

class C;
class A
{
    void foo( C& c );
};

(ただし、 には問題がありますC。クラスCに を含めることはできません。これは、インスタンス化型が完全である必要があり、閉じ括弧の後にのみ完全である必要があるためです。std::vector<C>)std::vectorC

于 2013-04-24T09:12:05.893 に答える