Ça ne sert à rien de se prendre la tête avec les nouvelles normes du C++ !

C++, Qt, OpenGL, CUDA

Cet article a été transféré sur mon wiki, il ne sera pas mis à jour sur ce blog. Je recommande de lire la nouvelle version sur la page suivante : Ça ne sert à rien de se prendre la tête avec les nouvelles normes du C++ !

« Ça ne sert à rien de se prendre la tête avec les nouvelles normes du C++ ! Il est plus simple d’attendre que les pratiques soient ancrées dans les habitudes pour les utiliser. »

Cette remarque n’est évidemment pas de moi, mais on me l’a déjà sortie plusieurs fois. L’idée, légitime, est de savoir pourquoi suivre l’actualité du C++ alors que (en tant qu’utilisateur du langage) nous n’aurons pas à utiliser des nouvelles fonctionnalités dans nos codes actuels avant plusieurs années. Ou pire, ces fonctionnalités seront abandonnées ou modifiées peu de temps après. On ne va quand même pas s’embêter à réécrire un code…

View original post 475 mots de plus

Sémantiques

Introduction

La question de la sémantique d’une classe, entité ou valeur, revient souvent en C++. Et bien que cette question devrait se poser lors de la conception, les discussions sur les forums nous montrent qu’elle a souvent besoin d’être reposée suite à un problème technique. Les problèmes qu’on retrouve le plus souvent et qui traduisent un mauvais choix de sémantique, voire plus généralement de conception, sont le slicing et un besoin de downcasting.

Ces problèmes apparaissent essentiellement lors de l’utilisation de l’héritage public. Dans mon article précédent j’ai présenté une alternative à l’introduction d’héritage public dans les interfaces, celui-ci se retrouve masqué. Je vais donc partir du postulat de l’absence d’héritage public pendant la phase de conception. Les questions liées à la sémantiques vont donc concerner les services spéciaux du langage.

Lire la suite

Concepts et polymorphisme

Introduction

Comme le précédent, cet article va s’appuyer sur un problème concret pour illustrer le polymorphisme en utilisant la notion de concept. Il s’appuiera très fortement sur boost.type_erasure pour essayer de garder le plus possible une vision d’ensemble. L’approche est très proche, pour ne pas dire identique, à ce qu’expose Sean Parent ici, je vous invite à lire cet article et plus spécialement si vous voulez un aperçu du fonctionnement précis.

Le problème choisit est le suivant : on se place dans un contexte graphique où l’on manipule et dessine différentes formes. L’objectif est la réalisation d’une classe  permettant de manipuler et dessiner plusieurs formes ensemble. A nouveau le problème est surtout un prétexte, aucune alternative n’a été étudiée et comparée pour la réalisation de cet article.

Lire la suite

Créer des applications avec Qt 5 – Les essentiels

C++, Qt, OpenGL, CUDA

Après plusieurs mois de rédaction, le livre auquel j’ai participé est sorti en version finale.

Le livre est déjà en rupture de stock chez Amazon (mais pas d’inquiétude, il sera réapprovisionné vendredi). Vous pouvez de toute façon le commander directement sur le site de l’éditeur (en version numérique ou papier).

Bonne lecture et n’hésitez pas à faire des commentaires/remarques/critiques. Un forum dédié sur QtFr.org a été créé. Il y en a un également sur Developpez.com, mais comme je n’y ai pas accès, je ne pourrais pas répondre là-bas.

J’en profite également pour vous signaler que Philippe Dunski (que vous connaissez peut-être sous le pseudonyme koala01 sur Developpez.com, célèbre pour la longueur de ses réponses – et leurs pertinences) travaille sur un ouvrage sur le C++ : Coder efficacement – Bonnes pratiques et erreurs à éviter (en C++).

Bonne lecture.

View original post

Comportement dynamique

Introduction

Cet article va s’appuyer sur un problème concret pour montrer la mise en place d’une sélection dynamique de comportement. Un autre objectif sera d’illustrer l’assemblage de divers composants, principalement issus de boost, pour répondre à un problème plus complexe.

Les bibliothèques de boost utilisées sont : container, functional, mpl, phoenix et variant. Chacune de ces bibliothèques répond à un problème bien précis, si bien que l’essentiel du travail sera de les assembler sans se soucier des problématiques techniques inhérentes au langage.

Le problème que j’ai choisi est assez classique, comment gérer de manière homogène plusieurs formes géométriques et déterminer les collisions avec divers algorithmes ? Ce problème est surtout un prétexte, je ne vais ni soutenir qu’il est utile dans une situation quelconque, ni qu’il est le plus efficace possible.

Lire la suite

Concept : Vers quoi doit tendre le C++

Introduction

Guillaume Belz a écrit un article suite à celui que j’ai fait sur l’écriture de services en C++11. Je ne vais pas faire de redite sur le sujet qu’il a traité, je n’aborderais donc ni comment définir et vérifier des concepts en C++11 (principalement car ça devient rapidement de la technique très lié au langage) ni comment ceci sera fait en C++14, Guillaume montre quelques facettes de la proposition du comité et ceux qui veulent aller plus loin n’ont qu’à lire ce document plus en détail.

Mon approche sera plutôt de voir les redondances dans la syntaxe actuelle de l’écriture de services en C++ et de montrer ensuite comment Haskell, un langage de programmation fonctionnel, fait ceci. Je tiens à préciser dès maintenant que par la nature même très différente des paradigmes des langages, je ne ferais pas de comparaisons code à code, elles n’auraient aucun sens.

Lire la suite

Ecriture de services en C++11, Partie 2/2

Introduction

Voici la seconde partie de l’article consacrée à l’écriture de services en C++ dans l’esprit de la programmation par concept. Lors de la publication de la première partie, la seconde était déjà écrite, cependant j’ai pris du temps pour relire : paradoxalement cette partie est plus courte mais est aussi celle où j’ai eu le plus de mal à décider quoi aborder et quoi passer sous silence.

La première partie concerne les services spécifiques à un classe template, c’est à dire lorsque le concept se traduit par « la classe une instance de tel modèle ». La seconde partie traite de quelques formes idiomatiques des services spéciaux du C++, c’est à dire ceux qui ont une signification propre au langage.

Lire la suite