C++ C++;不初始化类的Class.function语法(Arduino)
这是一个非常初级的问题,所以请不要对我太苛刻。在C++中,特别是在ARDUINO平台上,尽管我怀疑这有什么不同,但我经常使用这样的库:C++ C++;不初始化类的Class.function语法(Arduino),c++,arduino,C++,Arduino,这是一个非常初级的问题,所以请不要对我太苛刻。在C++中,特别是在ARDUINO平台上,尽管我怀疑这有什么不同,但我经常使用这样的库: #include "WiFi.h" ... Serial.println("Supra"); WiFi.begin(MODE); ... 但我从未初始化过这些类,但它们的行为似乎像单例。我找了一些可能有线索的来源,但什么也没找到 这些类是如何初始化的?我如何创建自己的,例如名为Messenger,只需包含其头文件即可访问,然后使用变量名Messenger,并
#include "WiFi.h"
...
Serial.println("Supra");
WiFi.begin(MODE);
...
但我从未初始化过这些类,但它们的行为似乎像单例。我找了一些可能有线索的来源,但什么也没找到
这些类是如何初始化的?我如何创建自己的,例如名为
Messenger
,只需包含其头文件即可访问,然后使用变量名Messenger
,并具有类似于Messenger.send
?arduino-esp32主分支中的WiFi.h
头:
class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass
{
// ...
};
// here global variable of class WiFiClass is defined
extern WiFiClass WiFi;
现在,当您执行WiFi.begin(无论什么)
时,您正在调用WiFiClass
继承的WiFiClass
方法
从WiFiSTA.h
:
class WiFiSTAClass
{
public:
wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin();
// ...
如果您想在标题中创建自己的类和该类的全局变量,只需创建标题,例如Myheader.hpp
:
#pragma once
// MyHeader.hpp
class Messenger {
public:
bool send() {
// whatever
return true;
}
};
extern Messenger Msngr;
然而,我强烈劝阻你遵循这种模式。由于许多原因,使用全局变量是相当糟糕的。如果出于某种原因希望避免复制类的对象,只需使用智能指针即可。如果出于某种原因希望在其他地方创建类的对象,只需创建一个工厂,返回所需的实例。来自arduino-esp32主分支中的
WiFi.h
头:
class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass
{
// ...
};
// here global variable of class WiFiClass is defined
extern WiFiClass WiFi;
现在,当您执行WiFi.begin(无论什么)
时,您正在调用WiFiClass
继承的WiFiClass
方法
从WiFiSTA.h
:
class WiFiSTAClass
{
public:
wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin();
// ...
如果您想在标题中创建自己的类和该类的全局变量,只需创建标题,例如Myheader.hpp
:
#pragma once
// MyHeader.hpp
class Messenger {
public:
bool send() {
// whatever
return true;
}
};
extern Messenger Msngr;
然而,我强烈劝阻你遵循这种模式。由于许多原因,使用全局变量是相当糟糕的。如果出于某种原因希望避免复制类的对象,只需使用智能指针即可。如果出于某种原因希望在其他地方创建类的对象,只需创建一个将返回所需实例的工厂。请在问题中添加源代码链接。您只需检查WiFi.h界面并查看这些WiFi.begin的定义即可。您可以按照类似的方式创建自己的Messenger.send。它们“像单身汉一样”因为它们是全局变量。请在您的问题中添加源代码链接。您所能做的只是检查WiFi.h界面并查看这些WiFi.begin的定义,然后您可以按照类似的方式创建自己的Messenger.send。由于它们是全局变量,所以它们“像单例一样”。