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 原则,尤其是单一责任原则。

也许还有第三种我看不到的方式,它没有不方便。任何人都可以告诉我是否有更正确的剂量形式?

4

2 回答 2

2

使用前向声明:

class C;
于 2013-04-24T09:10:19.290 回答
2

我不确定我是否看到您的问题。没有问题:

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

(但是,您的 存在问题C。一个类C不能包含 a std::vector<C>,因为std::vector要求实例化类型是完整的,并且C仅在右大括号之后才完整。)

于 2013-04-24T09:12:05.893 回答