Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 20/10/2011, à 14:32

ehmicky

[C++][Boost]Utilisation des archetypes

Bonjour à tous,
Je souhaiterais utiliser les archetypes (avec Boost) pour m'assurer des concepts que doivent remplir les arguments de mes fonctions, mais je ne parviens pas à comprendre le fonctionnement.
Par example :

template <class T>
bool fonc( const T& Var )
{    return ( Var == T() ); }

Je suppose que cette fonction demande que T soit DefaultConstructible et EqualityComparable ( T() et T == T). Je veux vérifier cela avec des archetypes, alors j'essaie :

#include    <boost/concept_archetype.hpp>
int main(void)
{
    fonc( boost::equality_comparable_archetype<boost::default_constructible_archetype<> >() );
  return 0;    
}

Mais j'obtiens :

/home/ether/a/b.cpp: In function ‘int main()’:
/home/ether/a/b.cpp:12:88: error: no matching function for call to ‘boost::equality_comparable_archetype<boost::default_constructible_archetype<> >::equality_comparable_archetype()’
/home/ether/a/b.cpp:12:88: note: candidates are:
/usr/include/boost/concept_archetype.hpp:154:5: note: boost::equality_comparable_archetype<Base>::equality_comparable_archetype(boost::detail::dummy_constructor) [with Base = boost::default_constructible_archetype<>]
/usr/include/boost/concept_archetype.hpp:154:5: note:   candidate expects 1 argument, 0 provided
/usr/include/boost/concept_archetype.hpp:152:9: note: boost::equality_comparable_archetype<boost::default_constructible_archetype<> >::equality_comparable_archetype(const boost::equality_comparable_archetype<boost::default_constructible_archetype<> >&)
/usr/include/boost/concept_archetype.hpp:152:9: note:   candidate expects 1 argument, 0 provided

equality_comparable_archetype ne peut pas être instantié autre que par copie (sauf avec une classe de boost::detail, que je devrais donc éviter), donc comment instantier cette classe ?
Comment utiliser les archetypes ?
Merci smile

Dernière modification par ehmicky (Le 20/10/2011, à 14:33)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#2 Le 20/10/2011, à 20:45

Le Farfadet Spatial

Re : [C++][Boost]Utilisation des archetypes

Salut à tous !

   Fait un peu rapidement, mais à mon avis ton exemple devrait plutôt ressembler à ceci :

template <class T> bool fonc (const T &var) {
  BOOST_CONCEPT_ASSERT((DefaultConstructible<T>));
  BOOST_CONCEPT_ASSERT((EqualityComparable<T>));
  return (var == T());
}  // template <class T> bool fonc ( const T &)

   Ça va sans dire, mais ça va mieux en le disant : as-tu consulté la documentation officielle ?

   À bientôt.

Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 20/10/2011, à 20:46)


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#3 Le 20/10/2011, à 21:06

ehmicky

Re : [C++][Boost]Utilisation des archetypes

Salut,

Merci pour ta réponse,
Oui j'utilise seulement elle pour apprendre Boost.
Non, je veux utiliser des archetypes pas des concepts checks.
En utilisant les concepts checks avec BOOST_CONCEPT_ASSERT, etc., je peux effectivement m'assurer que les utilisateurs de la bibliothèque utilisent fonc avec un argument modelant les concepts nécessaires.
Mais d'après ce que j'ai crû comprendre, les archetypes sont pas destinés aux utilisateurs de la bibliothèque, mais aux concepteurs de bibliothèque : une classe modelant un concept précis (et pas plus), que l'on passe en argument à une fonction pendant la phase de test pour s'assurer que cette fonction n'a besoin que de ce concept, et pas d'autres supplémentaires. Comme ça, on est sûr des concepts requis par une fonction et on peut alors mettre BOOST_CONCEPT_ASSERT, etc.

Je trouve l'idée intéressante, mais je n'arrive pas à utiliser les archetypes donnés d'emblée par Boost dans <boost/concept_archetypes.hpp>.

Dernière modification par ehmicky (Le 20/10/2011, à 21:08)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#4 Le 23/10/2011, à 17:51

Le Farfadet Spatial

Re : [C++][Boost]Utilisation des archetypes

Salut à tous !

ehmicky a écrit :

Mais d'après ce que j'ai crû comprendre, les archetypes sont pas destinés aux utilisateurs de la bibliothèque, mais aux concepteurs de bibliothèque : une classe modelant un concept précis (et pas plus), que l'on passe en argument à une fonction pendant la phase de test pour s'assurer que cette fonction n'a besoin que de ce concept, et pas d'autres supplémentaires. Comme ça, on est sûr des concepts requis par une fonction et on peut alors mettre BOOST_CONCEPT_ASSERT, etc.

   À nouveau non-testé, mais que penses-tu de ceci :

#include    <boost/concept_archetype.hpp>
int main(void) {
  // Type de l’archétype pour le test.
  typedef boost::equality_comparable_archetype<boost::default_constructible_archetype<> >
    ValueType;
  // Instance de l'archétype.
  ValueType archetype;
  fonc(archetype);
  return 0;    
}  // main

   La référence pour ceci est la page suivante : http://www.boost.org/doc/libs/1_47_0/li … vering.htm.

   À bientôt.

Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#5 Le 23/10/2011, à 18:12

ehmicky

Re : [C++][Boost]Utilisation des archetypes

Ce code provoque les mêmes messages d'erreur que ceux indiqués dans le premier post, pour la même raison.
La ligne :

  ValueType archetype;

plante parce que boost::equality_comparable_archetype ne peut pas être construit sans argument. Les seuls arguments du constructor possible sont le copy constructor, et une classe interne boost::detail::dummy_constructor, qu'il ne faut donc pas utiliser (car pas documentée, et dans namespace boost::detail). En d'autres termes : impossible d'instantier cette classe ?

Dernière modification par ehmicky (Le 23/10/2011, à 18:12)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#6 Le 24/10/2011, à 21:22

Le Farfadet Spatial

Re : [C++][Boost]Utilisation des archetypes

Salut à tous !

ehmicky a écrit :

En d'autres termes : impossible d'instantier cette classe ?

   J’essayerais de regarder plus en détails, mais je dois dire que je n’ai pas beaucoup de temps à moi en ce moment.

   À bientôt.

Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

Haut de page ↑