我目前正在使用两个相同的库来解析 Arduino 中接收到的命令(通过TCP/IP和通过串行)。所有不同之处在于传递给解析器的对象类型。
//main.cpp
SerCmd sCmd;
EthCmd eCmd;
void setup() {
sCmd.listen("#",dumpCmd);
eCmd.listen("#",dumpCmd);
}
void loop() {
HardwareSerial SerClient = Serial.available();
EthernetClient EthClient = Server.available();
eCmd.read(SerClient);
sCmd.read(EthClient);
}
//SerCmd.h
class SerCmd {
public:
void read(HardwareSerial &dataObj);
}
//EthCmd.h
class EthCmd {
public:
void read(EthernetClient &dataObj);
}
很明显:
- 这两个对象几乎相同,它们共享许多常用方法(sCmd、eCd)。
- 这两个类(SerCmd、EthCmd)可以用一个类替换以减小草图大小。
如何创建一个可以传递给read()
方法的“隐形”类,同时仍然处理下面的两个不同对象中的任何一个?
在这种情况下使用的常见做法是什么?
到目前为止,我能够编译以下代码,但无法初始化任何方法:
class Communication {};
HardwareSerial *SerClient;
Communication *Comm;
void setup() {
Comm = (Communication*) SerClient;
//Comm.begin(9600);
//Error: request for member 'print' in 'Comm',
//which is of non-class type 'Communication*'
}