Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Standard C++0x : Les concepts ne seront pas intégrés
Qu'en pensez-vous ?

Le , par JolyLoic

0PARTAGES

0  0 
Bonjour,

Le vote a eu lieu aujourd'hui, et la décision a été prise de ne pas inclure les concepts dans C++0x. Les principaux arguments étaient que beaucoup d'acteurs estimaient que la proposition n'était pas assez mature, et risquait de repousser le standard.

Nous n'avons pas encore décidé comment le travail sur les concepts doit continuer, et quand ils pourront être intégrés dans le langage.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de hiura
Membre actif https://www.developpez.com
Le 13/07/2009 à 19:07
Pour les ignorants comme moi, aurais-tu un lien de ce que sont les concepts ?
0  0 
Avatar de Goten
Membre chevronné https://www.developpez.com
Le 13/07/2009 à 19:59
En gros ça permet de définir une interface que doit fournir un paramètre de template.
Ca permet en premier lieu d'avoir des erreurs du compilo plus direct, par exemple si t'essayes de stocker dans un vecteur un objet qui n'est pas copi-able.

Ca aurait permis d'écrire ce genre de chose :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T> requires equalityComparable<T>
bool isEqual(const T& lhs, const T& rhs)
{
     return lhs==rhs;
}

// et on définit un concept comme ceci :

auto concept equalityComparable<typename T>
{
    bool operator==(const T&);
}
Désolé pour la pauvreté de l'exemple mais j'ai pas mieux en tête xD. D'ailleurs je suis pas sur de l'exactitude de la syntaxe du concept (au niveau de la définition de l'opérateur)

J'ai pas de lien très poussé sous la main, jte retrouve ça.
0  0 
Avatar de JolyLoic
Rédacteur/Modérateur https://www.developpez.com
Le 14/07/2009 à 7:55
Un des exemples fondateurs est std::sort. Si tu fais std::sort sur des itérateurs de std::list, tu auras un message d'erreur obscur qui parlera peut-être d'un problème avec un opérateur [] ou un opérateur + dans du code qui n'est pas à toi, mais fait partie de la bibliothèque standard.

Avec des concepts, tu aurais eu une erreur dans ton code, indiquant que sort a besoin d'itérateurs à accès direct (RandomAccessIterator), et que tu lui as fourni des itérateurs d'un mauvais type.

Le but étant de rendre les messages d'erreur des templates compréhensibles par le commun des mortels.

Et ils permettaient aussi bien d'autres choses, entre autre une bonne gestion de l'overloading des templates, ce qui aujourd'hui doit se faire à la main avec des astuces et des classes de traits. Avec les concepts, les classes de traits auraient probablement disparu peu à peu.
0  0 
Avatar de hiura
Membre actif https://www.developpez.com
Le 14/07/2009 à 9:01
D'accord, merci à vous deux.

Je crois en fait que j'en avais déjà entendu parler. N'y avait-il pas l'intention d'introduire le mot clef where ?
0  0 
Avatar de 3DArchi
Rédacteur https://www.developpez.com
Le 14/07/2009 à 9:09
Bonjour,
Effectivement, c'est dommage.
Entre autres, les concepts :
-> jouent le rôle des classes traits : ils spécifient les exigences qu'un paramètre d'une classe/fonction template doit remplir (le code suivant ne suit pas la syntaxe exacte proposée mais illustre le propos ):
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
// définition d'un concept :
concept Comparable<typename T> {
bool operator<(T, T);
   // On spécifique qu'il doit exister un opérateur '<' de la forme indiquée ci-dessus.
}

// utilisation dans une fonction template :
template<class T>
   requires Comparable<T>
T min(T t1, T T2)
{...
_> jouent un peu le rôle des classes politiques avec les concept map : les concepts map permettent de dire comment un concept (un 'require') est rempli par une classe dans le cas où l'exigence n'est pas immédiate :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class personne {
public:
std::string nom;
std::string prénom;
};

concept Comparable<typename T> {
bool operator<(T, T);
}

concept_map Comparable<personne > { 
// ca ne définit pas un opérateur '<' sur la classe personne
// mais ça indique comment l'exigence doit être remplie
bool operator<(const personne& a, const personne& b) {
return (a.nom == b.nom) ?(
    (a.prénom == b.prénom)?
        false
        : (a.prénom< b.prénom))
    : (a.nom < b.nom)
;
}
Tu peux trouver des infos sur les concepts ici , ici ou
0  0 
Avatar de Alp
Expert éminent sénior https://www.developpez.com
Le 15/07/2009 à 8:45
C'est bien dommage

Qui plus est, j'avais commencé un article dessus
0  0 
Avatar de Goten
Membre chevronné https://www.developpez.com
Le 15/07/2009 à 8:59
C'est "qu'un" article (pas péjoratif du tout hein), quand je pense au petit gars des compilo qui implémentait déjà cette feature, les glandes :p.
0  0 
Avatar de Alp
Expert éminent sénior https://www.developpez.com
Le 15/07/2009 à 9:38
Citation Envoyé par Goten Voir le message
C'est "qu'un" article (pas péjoratif du tout hein), quand je pense au petit gars des compilo qui implémentait déjà cette feature, les glandes :p.
Oui, Doug Gregor doit avoir du mal à digérer ça, il était derrière Concept GCC, et les concepts en général je crois.
0  0 
Avatar de hiura
Membre actif https://www.developpez.com
Le 15/07/2009 à 9:54
Merci pour les liens.

De mon point de vue "utilisateur", c'est vrai que je suis déçu que ça soit repoussé au prochain std, mais en même temps je préfère ça à un ajournement du 0x.

Pour le travail de Doug Gregor, n'y a-t-il pas un "plan" de prévu ? ( Du style une version de gcc qui accepte les concepts ? )
0  0 
Avatar de Alp
Expert éminent sénior https://www.developpez.com
Le 15/07/2009 à 11:08
Hé bien : http://www.generic-programming.org/s...re/ConceptGCC/
qui devient (devenait ?) : http://gcc.gnu.org/svn/gcc/branches/...ncepts-branch/ (branche pour les concepts de gcc)

Plus d'infos sur http://www.generic-programming.org/ et http://gcc.gnu.org/projects/cxx0x.html#concepts
0  0