你怎么看这个概念:
项目中存在许多类,其中一些是单例的,希望在整个代码库中共享。包括每个必需的头文件并在子类中创建一个专用的指针调用可能会很麻烦。思路:有一个所谓的"传输对象",它携带指向实际实例的指针/引用,并提供getter。
class TransitObject
{
private:
MyGarden& garden;
MyApple& apple;
MyFountain& fountain;
public:
TransitObject(MyGarden& G, MyApple& A, MyFountain& F) : garden(G), apple(A), fountain(F) {}
MyApple& GetApple() { return apple; }
MyGarden& GetGarden() { return garden; }
MyFountain& GetFountain() { return fountain; }
};
class WoodShack
{
public:
WoodShack(TransitObject& t) { t.GetApple().whatever(); }
};
你认为这是一个优势吗?我喜欢它,因为它使携带单身人士非常容易。添加新实例非常容易,也不会让程序员感到困惑。请注意,代码只是一个示例,当然可以优化(const,析构函数等…)
看起来你是在重新发明轮子。您所展示的看起来非常像构建器设计模式,您甚至可以在网上找到c++示例(这里和这里)。