私は現在、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*'
}