19 mar. 2014

Références C++ mises à jour

Je profite d'un instant de votre précieux temps pour vous signaler que j'ai mis à jour la page Ouvrages et sites de référence pour le C++, avec plusieurs ajouts concernant C++11.

Bonne lecture !

20 juin 2012

Valeurs et entités : les deux grandes classes d'objets

Mise à jour : les commentaires de ce billet ont mis en évidence un problème plus que certain dans la relation illogique que j'ai établi entre sémantique de mouvement (notamment telle qu'elle est implémentée en C++11) et entité. Du coup, ce billet a été corrigé. Je le publie de nouveau en tête de page afin de permettre aux personnes l'ayant lu au moment de sa sortie de voir ces corrections.

En programmation objet, on manipule différents types d'objets. Certains obtiennent naturellement un constructeur par copie, d'autres non. Certains sont utilisés via des pointeurs, tandis que d'autres sont simplement copiés ici et là au gré des besoins. En bref, et même si vous ne vous en êtes pas encore rendu compte, certains de vos objets ont une sémantique de valeur, tandis que d'autres ont une sémantique d'entité.

Le but de cette article n'est pas de vous apprendre aujourd'hui à différencier une valeur d'une entité, mais de vous faire toucher du doigt ces deux grandes classes d'objets que tout oppose.

Lire la suite...

10 oct. 2011

Dangers et pièges des systèmes de suivi des références

On conçoit aisément qu'il est très difficile de bien concevoir une application ou une libraire : cela demande des connaissances pointues en design ainsi qu'une imagination débordante. Par contre, il est très facile de mal faire : il suffit de se laisser appeler par les sirènes des différents pièges qui, nonchalamment, s'installent sur notre route.

Ce billet traite de l'un de ces pièges : la notion de propriété des objets dans un programme.

Je sais, vous avez déjà lu cette introduction récemment...

Lire la suite...

31 janv. 2011

[Code source] preview de ekogen 0.5

Non, [ekogen 0.5] n'est pas encore sorti - ça ne saurait tarder ceci-dit. Mais puisque j'ai écrit deux posts sur le sujet sur gamedev.net, il me semblait logique de faire profiter mes lecteurs francophones de mes réflexions sur le sujet. Voici donc une version réécrite des deux posts de GD.net - en français, avec des explications en plus.

Lire la suite...

20 janv. 2011

Le futur standard C++ : introduction aux expressions rationnelles

Décidément, ce blog fait la part belle au C++ en ce moment. Mais on ne se refait pas, et plus j'étudie le standard à venir, plus ses possibilités provoquent en moi le désir d'en savoir plus (et de partager avec vous ce savoir). Rajoutez à cela que le projet sur lequel je travaille nécessite de ma part d'écrire un outil de taille relativement modeste dans ce langage, et vous aurez une vision assez claire de ce à quoi je passe mes journées en ce moment. Mais nous ne sommes pas ici pour discuter des turpitudes de ma vie, donc passons au sujet qui nous intéresse.

Le TR1 avait introduit les expressions régulières directement tirées de la librairie Boost. Puisque le TR1 n'a jamais vraiment pris (la faute aux vendeurs de compilateurs, qui ont délaissé cette extension de la librairie jusqu'à récemment), on trouve peu d'exemple d'utilisation de cette fonctionnalité. Profitons donc du fait que les expressions régulières arrivent dans le nom d'espace std pour nous y intéresser.

Lire la suite...

21 déc. 2010

C++ et l'internationalisation

Ce billet avait été publié une première fois, mais contenait un grand nombre d'erreurs factuelles. Il a été corrigé et amélioré depuis, et le voici publié à nouveau.
Mise à jour du 27 déc. 2010 : certaines erreur de typographie ont été corrigées

Il vous est certainement connu que dans le standard, les classes de chaines de caractère - ainsi qu'en fait tout ce qui manipule des chaines de caractère - sont représentée par une classe template nommée std::basic_string<>. L'un des paramètres de cette classe template est le type des caractères stockés dans la chaine. Et bien évidemment, le standard défini deux types distinct de chaines de caractères : std::string, qui est un std::basic_string<char>, est utilisé pour stocker des chaines ASCII traditionnelles tandis que std::wstring (un type alias sur std::basic_string<wchar_t>) est utilisé pour représenter des chaines dont chaque caractère fait sizeof(wchar_t) bytes[1]. wchar_t est le type caractère large, et est généralement utilisé pour encoder des caractères utilisant le jeu de caractère Unicode.

Du coup, on se surprend à penser qu'il est aisé de transformer une chaine simple, de type std::string, en une chaine en caractères larges de type std::wstring : un simple coup d'algorithme standard du type std::copy, voir l'utilisation de std::basic_string<>::assign() et hop, c'est fini. Du coup, traiter l'internationalisation dans un programme C++ parait d'une simplicité enfantine.

Bien évidemment, si c'était aussi simple, on n'aurait pas besoin de personnes intelligentes au comité de normalisation du C++... Y-aurait-il anguille sous roche ?

Notes

[1] selon le standard C++, sizeof(char) == 1 byte ; il ne s'agit pas d'un octet, mais d'une unité de mesure définie par le texte du standard.

Lire la suite...