【发布时间】:2011-01-10 02:54:06
【问题描述】:
我从事一个庞大的遗留项目。有许多类基本上只创建一次(它们应该是单例,但是哦,好吧)然后传递给程序中几乎所有其他类。
所以有很多这样的代码,其中类在其构造函数中具有几乎无穷无尽的指针列表
Foo(A* a, B * b, C * c, ...)
: Foo2(a,b,c),
_a(a),
_b(b),
_c(c),
...,
{}
我想如果我使用一个类来包含所有指针并使用前向声明来避免创建更多包含依赖项,我可以清理它。每个类都可以使用 getter 来提取他们需要的任何内容并包含适当的标题。
//No includes required
class A;
class B;
class C;
class InterfaceMngr
{
public:
InterfaceMngr(A * a, B * b, C* c)
:_a(a),
_b(b),
_c(c)
{
}
A * GetA() const { return _a; }
B * GetB() const { return _b; }
C * GetC() const { return _c; }
private:
A * _a;
B * _b;
C * _c;
};
所以 foo 示例现在看起来更像这样
Foo(Interface * inf)
: Foo2(inf),
_a(inf->GetA()),
_b(inf->GetB()),
_c(inf->GetC())
{}
好处是每当一个新的类 API 出现时,我可以将它添加到接口中,而无需再次更改数百个构造函数......
有人看到这个问题吗?我觉得我过度暴露了对某些类的访问权限,但它确实简化了代码的编辑。
【问题讨论】:
-
A、B、C 是相互关联的,还是正交的?
标签: c++