使用类指针拆分项目
Splitting a project with class pointers
我最近开始学习STM32F103微控制器的C++,我正在使用一个名为STM32plus的库。问题是,我根本不习惯C++和指针,而这个库实际上依赖于它们。
所以目前,我有 1 个源文件,我的所有代码都位于其中,我想开始将其拆分为多个部分。在我的主源文件的顶部,我有这样的声明:
#include "config/stm32plus.h"
#include "config/display/tft.h"
using namespace stm32plus;
using namespace stm32plus::display;
typedef Fsmc16BitAccessMode<FsmcBank1NorSram1> LcdAccessMode;
typedef SSD1289_Landscape_64K<LcdAccessMode> LcdPanel;
LcdAccessMode *_accessMode;
LcdPanel *dsp;
Font *font;
还有更多,但它看起来像那样(本节用于显示器,还有更多用于SD卡和其他组件(。我主要了解这里发生了什么。我在此文件中的一个函数如下所示:
template <class T>
void print(T text)
{
textx+=dsp->measureString(text);
*dsp<<Point(textx,texty)<<text;
}
void println()
{
textx=0;
texty+=font->getHeight()+1;
}
template <class T>
void println(T text)
{
print(text);
println();
}
现在,我想尝试将其移动到单独的文件或类(Print.cpp和Print.h(中,但是在尝试了各种不同的东西之后,例如extern类,包括整个库,前向声明,并且在谷歌搜索了10多个不同的错误之后,我试图编译该代码,并在谷歌上搜索我正在尝试做的事情,我根本找不到任何解决方案。我会发布我尝试过的示例,但我删除了我之前的所有尝试,无论如何它们都不起作用。
那么,谁能给我一个类的例子或将这些功能放在一个单独的文件/类中的方法,以便我可以在主程序中使用它,同时仍然允许主程序使用显示函数?
任何帮助/建议不胜感激。请注意,我仍然是C++新手,这是一个嵌入式系统,因此RAM是有限的(我无法创建显示对象/类的另一个实例(
关于模板函数:
在文件中使用模板专用化时,模板函数的定义需要可见。要实现这一目标,您有两种可能性:
-
在头文件中编写模板函数的定义,并将此头文件包含在将使用这些函数的所有.cpp文件中。
-
您为将使用的每种类型编写模板函数的前向声明,这称为模板函数专用正向声明(有关确切语法,请参阅此线程(。
关于文件范围指针:
如果希望打印函数处于print.cpp
并使用dsp
指针,则需要使该指针可见。您可以:
1( 向类型为 LCDPanel *
的print()
添加第二个参数(很好的解决方案(。这样,阅读函数声明的每个人都知道函数print()
使用LCDPanel
,而不必读取函数定义来查找使用了哪些全局变量。
2( 使LCDPanel
指针全局,因此在print.cpp
中可见(错误的解决方案(:
/* main.cpp */
LcdPanel *dsp;
/* main.h */
#include "config/stm32plus.h"
#include "config/display/tft.h"
using namespace stm32plus;
using namespace stm32plus::display;
typedef Fsmc16BitAccessMode<FsmcBank1NorSram1> LcdAccessMode;
typedef SSD1289_Landscape_64K<LcdAccessMode> LcdPanel;
extern LCDPanel *dsp;
/* print.cpp */
#include "main.h"
(顺便说一下,dsp
不是指定显示器的好名字,因为dsp
用于嵌入式世界中的数字信号处理(
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 将C++项目拆分为库的良好实践
- 有一个入门 C++ 类的编程项目 我们需要创建的函数之一是拆分函数
- 如何将我的 NDK 项目拆分为库和应用程序
- 使用类指针拆分项目
- 如何在C++中将长输入拆分为多个项目
- 将项目拆分为库和应用程序