Gibt es eine "with"-Direktive für den Arduino?

Guten Abend liebe Gemeinde, eine kurze Frage:

In VBasic gibt es einen "with"-Operator, mit dem sich die Lesbarkeit des Codes durchaus vereinfachen lässt. Folgendes Szenario in der Arduino-IDE:
Ich habe eine Klasse die zu Beginn instanziert wird, und im weiteren Verlauf werden diverse Funktionen und Methoden aus dieser Klasse aufgerufen.

NanoPLC plc;
...
plc.begin();
plc.readInput();
....
plc.writeOutput();

Lässt sich folgende Schreibweise realisieren?

NanoPLC plc;
...
with plc
.begin();
.readInput();
....
.writeOutput();
end with

Grüße, IRCox

Wir sind hier in C++!

Das ist mir durchaus bewußt... meine Frage war ob es in C(++) eine äquivalente Operation gibt.

Nein

Genaugenommen ist das kein Operator. "Operator" und "Anweisung" sind zwei verschiedene Dinge

Was sagt dir denn dein C++ Buch, oder die C++ Referenz?

Am nächsten kommt dem in C++ using
Ist was völlig anderes, aber @combie wäre dafür der perfekte Ansprechpartner.

Im vorigen Jahrtausend, als C für uns FORTRAN-Experten völlig neu war, hat uns sehr verwirrt, dass man einer schließenden geschweiften Klammer } nicht ansah, wozu sie gehörte.
Da haben wir C-Makros gemacht wie z.B.
#define ENDIF }
"Das haben wir aber bald aufgegeben" ist der Sinn dieser Geschichte für dich.

Danke für das Vertrauen, die Blumen.
Aber keine der drei using Einsatzmöglichkeiten ist mit dem with von Pascal oder VB äquivalent.

C++ hat seine Wurzeln in C, hat sich aber zu einer vollständig eigenständigen Sprache weiter entwickelt.
Ein With gehört in beiden Sprachen nicht dazu.
Die zugehörigen Argumentationen wurden vor Jahrzehnten schon ausgiebig ausgetauscht.
Tipp: Wenn einen die Gründe dafür interessieren, das Internet vergisst nichts.

Natürlich gibt es Möglichkeiten sich in C++ sowas ähnliches zu basteln.

Aber "schön" wird das nicht. (ganz im Gegenteil)

Ich persönlich halte das "den VB Features hinterhertrauern" für ein Verhalten, welches dazu führt, die "C++ Features" vor einem selber zu verbergen. Also für Kontraproduktiv.
Aus meiner Sicht ist C++, die mächtigste Sprache für unser kleinen µC, es ist eine Multiparadigmen Sprache. Schreibfaulheit ist hier sicherlich der falsche Ansatz, kein guter Ratgeber.

C++ kann das Methode Chaining.

Ein Fragment aus einem Beispiel meiner ADC Klasse


void setup() 
{
   Serial.begin(9600);

   adc  .enable()
        .setReference(Adc::REF_11)
        .setClockDivisor(Adc::DIV_128)
        .setSource(Adc::MUX_THERMO)
        .setCallBack(adcCallBack)
        .enableAutoTrigger()
        .setTrigger(Adc::TRIG_FREERUNNING)
        .enableIrq()
        .startConversion();
}

Das kommt allerdings ganz ohne irgendwelche Schlüsselworte aus.

Hallo,

ich würde ggf. sowas machen

void tuDasMit (Datentyp object) // oder auto
{
  object.begin();
  object.readInput();
}

tuDasMit(plc);

Ich neige eher dazu Operatoren zu überladen, wenn es auf dem Wege lösbar ist. Denn so bleibt es in der Struktur

Hier übertreibe ich es mal:


enum class Farbe:byte{Blau,Rot};

struct Kreis
{
  Farbe farbe;
  float durchmesser;
  Kreis &operator()(Farbe f){farbe = f; return *this;}
  Kreis &operator()(float d){durchmesser = d; return *this;}
};

Kreis kreis;

void setup() 
{
  kreis(Farbe::Blau)(47.11);
}

void loop() 
{

}

Oder so ...
Es wird wie immer viele Varianten geben.

Ja!
Es gibt viele-"with" Möglichkeiten in C++.