Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

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

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

Hors ligne