0

私は現在、Arduinoで受信したコマンドを解析するために2つの同一のライブラリを使用しています( 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);
}

次のことは明らかです。

  • 2 つのオブジェクトはほぼ同一であり、多くの共通メソッド (sCmd、eCd) を共有しています。
  • 2 つのクラス (SerCmd、EthCmd) を 1 つのクラスに置き換えて、スケッチサイズを小さくすることができます。

read()その下にある 2 つの異なるオブジェクトのいずれかに対処しながら、メソッドに渡すことができる「ステルス」クラスを作成するにはどうすればよいですか?

そのような状況で使用される一般的な方法は何ですか?

これまでのところ、以下のコードをコンパイルできますが、メソッドを初期化できません。

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