0

我目前正在使用两个相同的库来解析 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*'
}
4

0 回答 0