Question

J'ai récemment essayé de comprendre un programme C ++ qui a été écrit par quelqu'un qui je suppose eu une formation en programmation fonctionnelle: Par exemple, il avait déclaré fermeture classe dont il largement utilisé et qui ne peu ressemblent à ce qu'on appelle une fermeture dans la programmation fonctionnelle. Une autre classe a été appelée garde , mais je n'ai pas tout à fait compris ce qu'il est encore bon pour. Il semble avoir une sorte de fonctionnalité de nettoyage attaché.

La seule langue dans laquelle j'ai vu un concept appelé garde est Erlang, mais cela ne semble pas à distance similaire au code que j'ai trouvé. Dans quelles autres langues fait un tel concept existe que l'auteur du code C ++ peut avoir fait allusion?

Était-ce utile?

La solution

Pour moi, on dirait qu'il utilisait RAII.
Le constructeur de classe / destructor est utilisé pour traiter une certaine forme de manière symétrique l'allocation des ressources / libération dans un contexte exception sûr (Qu'est-ce que les programmeurs Java appellent enfin {} comme destructor est guranteed à appeler.).

Ceci est un très commun langage C ++ et est largement DFT dans C ++ moderne.

ce que le regard de code comme ceci:

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

Ici, la garde est le verrouillage de la serrure dans le constructeur et déverrouiller la serrure dans le destructor.

Autres conseils

Le module Control.Monad de Haskell a guard :

  

guard :: MonadPlus m => Bool -> m ()   guard b est return () si b est True et mzero si b est False.

Par exemple, pour calculer triplets pythagoriciens où chaque jambe ne dépasse pas 25, vous pouvez utiliser

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

Pour une explication de ce qui se passe, voir mon blog A programmable expliqué virgule.

Les gardes dans la science informatique font généralement référence à l'expression booléenne qui indique qu'une construction de boucle devrait se poursuivre. Par exemple (pardonnez le jeu de mots)

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

Ici, i < N est le gardien.

Il est difficile de répondre à votre question plus en profondeur, sans plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top