gpt4 book ai didi

c++ - 在 C++ 中处理多个对象依赖项的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:23 25 4
gpt4 key购买 nike

我正在构建一个 C++ 应用程序,我有几个实用程序对象,我的所有类都需要使用这些对象。这些是日志记录对象、全局状态对象、DAL 对象等...

到目前为止,我一直将所有这些对象作为引用传递到我的类构造函数中。

例如:

class Honda : public Car{    public:        Honda ( const GlobalState & state,                 const Log & logger,                 const DAL & dal );    ...    private:      const GlobalState & my_state;      const Log & my_logger;      const DAL & my_dal;}

这很快就会变得乏味,因为每次我添加一个我的所有类都需要访问的实用程序对象时,我必须到处更改构造函数。

我听说解决此问题的正确方法是创建一个包含所有不同实用程序对象的结构并将其传递(作为引用)给需要访问它的所有对象。

这是处理这个问题的正确方法吗?谢谢!

更新:感谢大家的反馈。经过一些额外的研究,我决定继续使用依赖注入(inject)。

最佳答案

您可以使您的 GlobalState、Log、DAL 类成为单例:

class GlobalState {
public:
static GlobalState& getInstance();
protected:
GlobalState();
GlobalState(const GlobalState&);
GlobalState& operator= (const GlobalState&);
private:
static GlobalState* p_instance;
};

static GlobalState* GlobalState::p_instance = NULL;

/*static*/
GlobalState& getInstance() {
// TODO: acquire lock if multi-threaded
if (!p_instance) { // first time?
p_instance = new GlobalState(); // create sole instance
}
// TODO: release lock if multi-threaded
return *p_instance; // sole instance
}

然后,在你的各种方法中,

Honda::MyMethod() {
...
const GlobalState& my_state = GlobalState::getInstance();
...
}

您可以通过 defining a singleton C++ template 进一步简化您的生活(并减少代码重复量) , 在某些条件下(例如所有类的构造函数采用相同数量和类型的参数等)

关于c++ - 在 C++ 中处理多个对象依赖项的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/571652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com