这可能更多关于味道。
这样的事情:
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
才能完全申报。然后我看到两个选项:
1)使foo如此:void foo(void *c);
并在实现(在A.cpp中)进行转换。这个问题不是很好或干净,对其他开发人员来说有点混乱。
2)在我正在处理的命名空间上创建一个对象。这违反了SOLID原则,特别是单一责任原则。
也许还有第三种方法,我没有看到它,并没有不方便。任何人都可以告诉我是否有更正确的剂量形式?
答案 0 :(得分:2)
使用前瞻声明:
class C;
答案 1 :(得分:2)
我不确定我是否看到了您的问题。没问题:
class C;
class A
{
void foo( C& c );
};
(但C
存在问题。类C
不能
包含std::vector<C>
,因为std::vector
需要。{1}}
实例化类型完成,C
仅完成
在闭幕后。)