C++:项目相互依赖调用解决方法两种方法

news2024/10/7 3:17:39

Bmodel依赖于Amodel,但是Amodel又需要BModel的信息。这样就会导致相互依赖。


方法一:采用静态变量static

链接:C++开发中一个解决方案里,两个项目的相互引用,相互依赖的实现方法(解决方法)_Capricorn_L的博客-CSDN博客

 Amodel
OperationUIManager.h

#pragma once

#ifdef AMODEL_EXPORTS
#define AMODEL_API _declspec(dllexport)
#else
#define AMODEL_API _declspec(dllimport)
#endif

class AMODEL_API OperationUIManager
{
public:
	OperationUIManager() {}
protected:
	static OperationUIManager* m_pOperationUIManager;
public:
	//将数据加入到提取的图层
	virtual int Get(int num) = 0;
	static OperationUIManager* GetManager();
};

 OperationUIManager.cpp

#include "pch.h"
#include "OperationUIManager.h"
OperationUIManager* OperationUIManager::m_pOperationUIManager = NULL;
OperationUIManager* OperationUIManager::GetManager()
{
	return m_pOperationUIManager;
}

 Bmodel
DesignUIManger.h

#ifdef BMODEL_EXPORTS
#define BMODEL_API _declspec(dllexport)
#else
#define BMODEL_API _declspec(dllimport)
#endif


class  BMODEL_API DesignUIManger :public OperationUIManager
{
public:
	static DesignUIManger& GetInstance();

private:
	DesignUIManger();
	DesignUIManger(const DesignUIManger&)=delete;
	DesignUIManger& operator=(const DesignUIManger&) = delete;
public:
	virtual int Get(int num);
};

DesignUIManger.cpp 

#include "pch.h"
#include "DesignUIManger.h"

DesignUIManger& DesignUIManger::GetInstance()
{
	static DesignUIManger m_instance;
	return m_instance;
}

int DesignUIManger::Get(int num)
{
	return num * 10;
}

DesignUIManger::DesignUIManger()
{
	OperationUIManager::m_pOperationUIManager = this;
}

DesignUIManger& m_pDesignUIManager = DesignUIManger::GetInstance();

 modelsRelation.cpp (执行 DesignUIManger::GetInstance().Get(10);是为了让程序初始化一下DesignUIManger地址)

方法二:采用函数指针,回调函数

 Amodel

OperationUIManager.h

#include <functional>
#ifdef AMODEL_EXPORTS
#define AMODEL_API _declspec(dllexport)
#else
#define AMODEL_API _declspec(dllimport)
#endif

using Getfun = std::function<int(int)>;

extern "C"	//以"C"的方式导出接口
{
	extern AMODEL_API Getfun GetCurDb;
}

 OperationUIManager.cpp

#include "OperationUIManager.h"

Getfun GetCurDb = nullptr;

  Bmodel
DesignUIManger.h

#include "SingletonInterface.h"

#ifdef BMODEL_EXPORTS
#define BMODEL_API _declspec(dllexport)
#else
#define BMODEL_API _declspec(dllimport)
#endif

BMODEL_API void Init();

 DesignUIManger.cpp

#include "DesignUIManger.h"
#include "../AModel/OperationUIManager.h"

int Get1(int num) { return num * 2; };


void Init()
{
	GetCurDb = Get1;
}

  modelsRelation.cpp (执行 init;是为了让程序初始化一下)

#include <iostream>
#include "../AModel/OperationUIManager.h"

#include "../BModel/DesignUIManger.h"
using namespace std;
int main()
{
    Init();
    if (GetCurDb)
    {
		cout << GetCurDb(10) << endl;
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P物质肽[DArg1, DTrp5, 7, 9, Leu11]

这种物质P类似物是一种非常有效的小细胞肺癌(SCLC)细胞体外生长的广谱神经肽抑制剂(IC₅₀ 5M)。此外&#xff0c;它在体外有效地抑制信号转导通路&#xff0c;并在体内显著延缓SCLC异种移植物的生长。因此&#xff0c;它可能对SCLC有治疗价值。 编号: 139994中文名称: P物质肽…

数据结构学习笔记(Ⅰ):绪论

课程链接:【旧版】1.0_开篇_数据结构在学什么_哔哩哔哩_bilibili 目录 1 数据结构的基本概念 2 算法 2.1 算法的基本概念 1.算法概念 2.算法的特性 3.好算法特质 2.2 算法的时间复杂度 2.3 算法的空间复杂度 1 数据结构的基本概念 数据&#xff1a;能输入到计算机中并…

Android StudioJNI开发之NDK环境的搭建以及添加JNI支持(图文解释 简单易懂)

有问题可以评论区留言讨论~~~ 一、NDK环境搭建 Android系统的所谓原生开发是在App中调用C/C代码&#xff0c;鉴于这两个语言具有跨平台的特性&#xff0c;如果某项功能使用C/C实现&#xff0c;就很容易在不同平台之间移植。 完整的Android环境包括三个开发工具。分别是JDK SD…

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

如何缩减layout电路面积&#xff1f;减少晶体管的数量——以全加器为例【VLSI】What is Full adder ?全加器的设计方法1. 32T 原始表达式不经过化简的电路图2. 28个晶体管 最基本的静态互补CMOS电路的全加器静态互补CMOS静态互补CMOS的优势与劣势28T 电路图28T的棒状图Stick D…

彻底搞明白概率论:随机事件,样本空间,必然事件,不可能事件

文章目录样本空间样本点随机事件&#xff0c;必然事件&#xff0c;不可能事件参考视频样本空间 随机试验E的一切可能基本结果&#xff08;或实验过程如取法或分配法&#xff09;组成的集合称为E的样本空间&#xff0c;记为S 注意&#xff0c;对于不同的实验&#xff0c;样本空间…

【构建ML驱动的应用程序】第 3 章 :构建您的第一个端到端管道

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

FastDFS安装

fastdfs架构图 准备安装包 libfastcommon-1.0.43.tar.gz fastdfs-6.06.tar.gz fastdfs-nginx-module-1.22.tar.gz 一 、FastDFS--tracker安装 FastDFS安装环境 FastDFS是C语言开发&#xff0c;建议在linux上运行&#xff0c;本教程使用Centos7.4作为安装环境。 安装gcc …

如何使用做一个弹幕效果

效果展示 前置准备 背景图 图片素材 具体步骤 添加一个图片背景 添加一个水平滚动容器 添加一个容器 制作弹幕字体 制作弹幕动画效果 步骤分解 添加一个图片背景 拖拽 图片组件 到 编辑区 选中 图片组件 点击 检查面板 中的 样式 调整 图片组件 的 样式 添加一个水平滚动容…

餐饮机器人AB面:有人离场、有人挺进

民以食为天&#xff0c;餐饮生意是一颗“常青树”。 餐饮行业“常青”不代表没有变化&#xff0c;近年来Z世代消费者对餐饮口味、餐饮效率和餐饮安全提出更高要求。与此同时&#xff0c;在新消费、新技术、新模式的推动下&#xff0c;餐饮行业衍生出多元化趋势&#xff0c;外卖…

详解环境变量

目录前言一、什么是环境变量&#xff1f;二、查看环境变量的方法三、查看环境变量的内容四、普通变量VS环境变量五、导出环境变量六、常见的环境变量七、set命令&#xff1a;查看普通变量或环境变量八、C/C语言中main函数中的参数1、main函数的第一个和第二个参数应用&#xff…

IDEA提交本地项目到Gitee远程仓库

上一篇【Git的安装、配置、使用02【Idea对GitHub支持使用】】https://liush.blog.csdn.net/article/details/123446538 1. 新建仓库 2. IDEA登录gitee账号 3. 选择当前的项目作为本地库&#xff08;相当于初始化&#xff09; 4. 将项目添加到暂存区中 5. 将暂存区项目文件提交…

【CSS】CSS文本样式【CSS基础知识详解】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【CSS】 【CSS专栏】已发布文章 &#x1f4c1;【CSS基础认知】 &#x1f4c1;【CSS选择器全解指南】 &#x1f4c1…

十万部冷知识:“澳大利亚”为什么属于亚洲球队?

在2022年卡塔尔世界杯上&#xff0c;总共有6支球队入围&#xff0c;他们分别是日本队&#xff0c;韩国队&#xff0c;沙特队&#xff0c;伊朗队&#xff0c;澳大利亚队&#xff0c;还有就是东道主卡塔尔队。但是我们知道&#xff0c;澳大利亚&#xff0c;并不是亚洲的国家&…

Flutter 项目中管理你的 Assets Texts Widgets

Flutter 项目中管理你的 Assets Texts Widgets 原文 https://medium.com/mustafatahirhussein/managing-your-assets-texts-and-widgets-professionally-a-must-read-flutter-guide-ffb93b19eff0 前言 这篇文章是 Mustafa Tahir 写的关于 Flutter 项目管理的技巧&#xff0c;可…

音视频SDP协议详解(描述会话的协议)

前言 ①SDP协议是会话描述协议&#xff08;Session Description Protocol&#xff09;的缩写&#xff0c;是一种会话描述格式&#xff0c;一种描述流媒体初始化参数的格式&#xff0c;为描述多媒体数据而设计。 文末卡片领取音视频免费资料合集 &#xff08;流媒体是指在传输过…

csdn月入过万的作者是如何练成的?

很多年前&#xff0c;我有一个成为作家的梦想。 后来从事了技术&#xff0c;觉得与作家梦越来越远了。 虽然梦想远去&#xff0c;但写字的欲望没有停止。 这些年&#xff0c;一直在有道云笔记上记录自己的工作心得&#xff0c;偶尔会来csdn上写一写。 我在csdn真正发力的时候…

自己怎么搭建一个网站?【自己建立网站】

说到建立网站&#xff0c;有些动手能力比较强的小伙伴可能就在想自己怎么搭建一个网站。想自己搭建一个网站&#xff0c;至少也是需要看懂html和cssdiv这些编程代码的&#xff0c;如果不懂代码就只能另寻方法了。那么自己怎么搭建一个网站&#xff1f; 现在市面上有很多的建站…

数据分析基础入门_环境安装

前言 python版本为3.6.8 主要记录一下数据分析入门或者人工智能入门基础所用到的库文件的环境安装过程。 1.批量安装所需库文件 新建 requirements.txt 文件&#xff0c;将以下内容复制到文本文件中保存。 matplotlib2.2.2 numpy1.14.2 pandas0.20.3 tables3.5.2 jupyter1…

Qt 中捕获三方库自身标准打印方法

【写在前面】 很多时候&#xff0c;我们为了方便调试&#xff0c;常常需要加入一些打印。 例如 Qt 中的 QDebug&#xff0c;C 和 C 中的 printf / cout 等等&#xff0c;又或者是三方库提供的标准打印接口。 然而大部分时候&#xff0c;这些打印相当不统一(格式和位置)&#xf…

高清架构整洁之道PDF下载

架构整洁之道高清PDF下载&#xff0c;请扫描如下二维码&#xff0c;支付3元。并加微信&#xff0c;发给你。谢谢。