Frage

Ich habe versucht, vor kurzem ein C ++ Programm zu verstehen, die von jemandem geschrieben wurden, den ich einen Hintergrund in der funktionalen Programmierung hatte annehmen: Zum Beispiel hat er eine Schließung erklärt Klasse, die er ausgiebig genutzt und die etwas nicht ähneln, was als Verschluss in der funktionalen Programmierung bekannt ist. Eine weitere Klasse wurde ein Wächter genannt, aber ich habe noch nicht ganz herausgefunden, was es gut ist. Es scheint eine Art Bereinigung Funktionalität zu haben, um es angebracht ist.

Die einzige Sprache, in der ich ein Konzept namens gesehen habe Wächter ist Erlang, aber das entfernt ähnlich sieht nicht auf den Code fand ich. In dem, was anderen Sprachen tut ein solches Konzept exist, dass der Autor des C ++ Code erwähnt haben?

War es hilfreich?

Lösung

Für mich klingt es wie er RAII verwenden.
Die Klasse Konstruktor / Destruktor symetrisch verwendet wird, irgendeine Form von Ressourcenzuweisung Griff / Veröffentlichung einer Ausnahme sicher Kontext (Was Java-Programmierer schließlich nennen würde {} als der Destruktor aufgerufen werden soll guranteed.).

Dies ist eine sehr häufige C ++ Idiom und ued ausgiebig in der modernen C ++.

Bitte benutzen Sie den Code wie folgt aussehen:

void Plop()
{
     Guard   guard(lock);
     // Do lots of stuff
}

Hier ist der Schutz ist das Schloss im Konstruktor Sperren und das Schloss in dem destructor zu entriegeln.

Andere Tipps

Haskells Control.Monad Modul hat guard :

  

guard :: MonadPlus m => Bool -> m ()
  guard b ist return () wenn b True ist, und mzero wenn b False ist.

Zum Beispiel Pythagoreische Tripel zu berechnen, wobei jedes Bein ist nicht mehr als 25, können Sie

verwenden
triples = do
  a <- [1..25]
  b <- [a..25]
  c <- [b..25]
  guard (p a b c)
  return (a,b,c)
  where
    p a b c = a*a + b*b == c*c

Für eine Erklärung dessen, was los ist, finden Sie in meinem Blog-Post A programmierbare Semikolon erklärt .

Guards in der Informatik beziehen sich typischerweise auf dem Booleschen Ausdruck, der angibt, dass ein Schleifenkonstrukt fortgesetzt werden sollte. Zum Beispiel (pardon das Wortspiel)

for (int i = 0; i < N; ++i)
  /* stuff */

Hier i < N ist der Wächter.

Es ist schwierig, Ihre Frage gründlichen ohne weitere Informationen zu beantworten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top