这可能更多的是关于味道。
像这样的东西:
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
需要B
和B
需要A
完全声明。然后我看到 2 个选项:
1)使 foo 如此:void foo(void *c);
并在实现上(在 A.cpp 中)进行强制转换。这个问题不是很好也不是很干净,对其他开发人员来说有点混乱。
2)在我正在处理的命名空间上创建一个对象。这违反了 SOLID 原则,尤其是单一责任原则。
也许还有第三种我看不到的方式,它没有不方便。任何人都可以告诉我是否有更正确的剂量形式?