Des QObject template partout…

Avez vous déjà rêvé de QObject template ? C’est a dire de pouvoir créer vos propre classe template qui dérivent de QObject et permettent d’utiliser les signaux et slots, le meta-object, les propriétés ?

template<class T>
class MyWonderClass : public QObject {
    ...
};

Si oui, alors :

  • premièrement, vous faites des rêves bizarres, n’hésitez pas a consulter 😀
  • deuxièmement… c’est possible maintenant !

Olivier Goffart, Qt Maintainer (c’est a dire responsable d’un module de Qt) du moc, auteur de woboq, conférencier régulier aux journées des développeurs Qt, s’est amusé (oui, encore un autre qui devrait peut être consulter… ils sont fous ces développeurs Qt) a écrit une petite bibliothèque pour utiliser Qt sans le moc (donc, il développe un outil pour se mettre lui même au chômage technique, en gros ? Quand je disais que les développeurs Qt sont fous).

Verdigris: Qt without moc

Donc, le but premier est de pouvoir se passer du moc dans Qt. Pour rappel, le moc est un parser qui lit les fichiers d’en-tête, trouve les classes Qt et génère des fichiers de source (moc_xxx.cpp) qui implémentent des fonctionnalités pour manipuler un meta-object dans chaque classe qui utilise la macro Q_OBJECT.

Le résultat est fonctionnel (dans les premiers tests réalisés), avec une syntaxe un peu plus lourde qu’avec le moc. Et, cerises sur le gâteau, il permet d’écrire des classes template dérivant de QObject, de créer des « nested » classes dérivant dans QObject. et plus besoin de déclarer ses classes dans un fichier d’en-tête. Et, a priori, cela serait compatible avec Qt 5.

A suivre.

 

Advertisements

4 commentaires sur « Des QObject template partout… »

  1. Bonne nouvelle.

    Le code source est juste hallucinant et je n’ai pas encore le niveau requis en templates pour tout comprendre :

    QMetaObject contient des QMetaMethod par exemple non ? Où est-ce que cela est géré dans les headers de la lib ? Et je ne trouve pas de référence à des classes de traits…

    1. Ah non j’ai pigé, c’est au niveau de la fonction makeMetaMethodInfo.

      Guillaume, aurais-tu un livre sur le metaprogramming à conseiller ?

      1. Question pas si facile que cela…

        Pour commencer, les livres généralistes, qui ont des chapitres sur la méta-programmation :
        The C++ Programming Language, 4th Edition
        C++ Primer (5th Edition)

        Et les grands classiques historiques :
        Modern C++ Design: Generic Programming and Design Patterns Applied
        C++ Templates: The Complete Guide
        C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond

        Et un petit dernier :
        Advanced C++ Metaprogramming

        Du coup, s’il fallait en conserver un seul, lequel je conseillerais ?
        – Si on débutes complètement en meta-programmation : Advanced C++ Metaprogramming. C’est celui qui me semble le plus abordable, le plus simple à lire.
        – si on a déjà des bases et que l’on veut aller plus loin : Modern C++ Design. Il est très complet, mais moins facile à lire.

        Il est également intéressant d’étudier les codes sources de bibliothèques de méta-programmation :
        Boost.MPL
        Loki
        Hana
        Brigand

        Et bien sur, il faut pratiquer énormément !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s