如何创建一个空的全局类并在启动时实例化它
How can I create an empty global class and instantiate it upon startup?
我正在构建一个Arduino项目,并希望构建一个可重用的库。然而,我在C#中可以很容易地避开Arduino固件使用的C/C++语法。
我想实例化一个类Foo的全局实例,该实例还包含一个结构Bar,该结构将用于Fooar添加一个新元素,我可以很容易地做到这一点。
C#
Foo myFoo;
void BobBobLaw()
{
Bar myBar = new Bar();
myBar.A = 1;
myBar.B = 2;
myBar.C = 3;
myFoo = new Foo(myBar);
myFoo.DoSomething();
}
如何为Arduino平台实现类似的功能?顺便说一句,我选择使用结构而不是Bar的类,因为这些信息是不可变的,应该是私有的。我不确定这是否是正确的选择,但我读到一些帖子说这是"首选"的做事方式。
如注释中提到的@Lightness Races in Orbit
。您可以在全局上下文中声明指向Foo的指针,在setUp函数中,您可以使用Foo的新对象在全局指针中初始化。
使用struct
并不能使它成为Bar不可变的。在C++中,结构等效于一个类,只是默认访问说明符是公共的除外。使Bar不可变的一种方法是使成员私有,并确保只有构造函数才能修改它
下面的例子给出了一个这样的例子,其中不可变的Bar是Foo类的成员。我希望你觉得它有用。
#include <iostream>
#include <string>
class Bar {
private:
int A,B,C;
public:
Bar(int a,int b, int c):A(a),B(b),C(c){};
int getA() const { return A; }
int getB() const { return B; }
int getC() const { return C; }
};
class Foo {
private:
Bar *mBar;
public:
Foo(Bar barInstance) {
mBar = new Bar(barInstance.getA(),barInstance.getB(),barInstance.getC());
}
void DoSomething() {
std::cout<<"Doing something";
}
};
Foo *fooPointer;
void setUpArduino() {
Bar myBar(1,2,3);
fooPointer = new Foo(myBar);
fooPointer->DoSomething();
}
int main() {
setUpArduino();
}
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 受约束的成员函数和显式模板实例化
- 对显式实例化的模板函数的未定义引用
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式