解决代码中模块之间的相互依赖性

阿里米安人

这是一个设计问题。我正在工作一个复杂的客户端-服务器体系结构,其中几个模块(始终在线程中运行)是相互依赖的,并且经常相互交换信息。在代码中只有一个入口点可以创建所有模块。在代码的早期,当模块较少时,通过创建和定义它们之间的关系,我没有任何问题。这是一个例子:

auto module1 = std::make_shared<Module1>();
auto module2 = std::make_shared<Module2>(module1);
auto module3 = std::make_shared<Module3>(module1);
auto module4 = std::make_shared<Module4>(module1, module3);
//and so on and so forth

随着模块数量的增加,有必要使模块成为课程的一部分。这样,我们可以在创建模块B之前在模块A中引用模块B。这种方法的问题在于仅头文件中的声明是不够的。因为在通过std :: make_shared创建模块的那一刻,通过另一个共享指针对其进行引用的模块会松开该引用。因此,此代码将不起作用:

m_module1 = std::make_shared<Module1>(m_module2);
m_module2 = std::make_shared<Module2>();

在整个代码中都使用了std :: shared_ptr,因此我无法将其更改为其他内容。我需要另一种方法来解决这个问题。

关于如何实现这一点的任何想法?

阿里米安人

这是一个更简单的解决方案。假设我们有一个Car类,该类在其构造函数中带有Wheel对象。我们声明Wheel对象,但不进行初始化。然后,我们通过传递对Wheel对象的引用来初始化Car对象。然后,我们创建wheel对象。由于Car将Wheel存储为指向std :: shared_ptr的指针,因此有可能:

class Wheel
{
private:
    int m_diameter;
public:
    Wheel(int diameter) : m_diameter(diameter)
    {

    }

    int GetDiameter()
    {
        return m_diameter;
    }
};

class Car
{
private:
    int m_startSpeed;
    std::shared_ptr<Wheel> *m_wheel;
public:
    Car(int startSpeed, std::shared_ptr<Wheel>* wheel) 
        : m_startSpeed(startSpeed), m_wheel(wheel)
    {

    }

    void Accelerate(int delta)
    {
        m_startSpeed += delta;
    }

    int GetDiameter()
    {
        return (*m_wheel)->GetDiameter();
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::shared_ptr<Wheel> wheel;
    auto car = std::make_shared<Car>(10, &wheel);
    wheel = std::make_shared<Wheel>(50);

    int wheelDiameter = car->GetDiameter();
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解决代码中模块之间的相互依赖性

来自分类Dev

使Intellij IDEA(13+)识别Gradle模块的相互依赖性

来自分类Dev

淘汰赛:如何编程可观察数组元素之间的相互依赖性

来自分类Dev

oop-棋盘与其棋子之间的相互依赖性

来自分类Dev

在MS Visual C ++中如何管理项目相互依赖性?

来自分类Dev

模块相互依赖

来自分类Dev

解决Webpack中的外部子模块依赖性

来自分类Dev

处理Android Studio中相互依赖的模块之间的常见依赖关系

来自分类Dev

多处理Python采样分布模拟(函数调用之间没有相互依赖性)

来自分类Dev

多处理Python采样分布模拟(函数调用之间没有相互依赖性)

来自分类Dev

解决正交模块的依赖性

来自分类Dev

模块之间的角度依赖性

来自分类Dev

模块之间具有循环依赖性的“未解决的导入”

来自分类Dev

解决Unity中的依赖性

来自分类Dev

如何检查代码以确保内核之间的模块依赖性-Linux Kernel?

来自分类Dev

MVVM中模型之间的依赖性

来自分类Dev

如何确保角度模块依赖性得到解决?

来自分类Dev

无法解决对本地模块的依赖性

来自分类Dev

Haskell-解决循环模块依赖性

来自分类Dev

相互依赖的C模块的单独编译

来自分类Dev

解决任务之间依赖性的最佳数据结构

来自分类Dev

解决任务之间依赖性的最佳数据结构

来自分类Dev

静态库之间的相互依赖关系

来自分类Dev

无法解决依赖性

来自分类Dev

解决厨师依赖性

来自分类Dev

解决盐粒的依赖性

来自分类Dev

解决冲突的依赖性

来自分类Dev

Angular模块依赖性

来自分类Dev

Angular模块依赖性