2010-06-14 4 views
1

Qt dispose d'un support intégré pour la création d'objets avec comptage de références intégré via QSharedData et QSharedDataPointer. Tout fonctionne bien, mais pour chacun de ces objets, j'ai besoin d'écrire beaucoup de code: QSharedData-based classe d'implémentation avec le constructeur et le constructeur de la copie, la classe d'objets itsef avec des méthodes d'accès pour chaque classé.Un moyen de générer automatiquement des structures basées sur QSharedData?

Pour des structures simples avec 5-10 champs cela nécessite beaucoup de presque le même code. Est-ce un moyen d'automatiser la génération de ces classes? Peut-être existe-t-il des générateurs qui prennent une courte description et génèrent automatiquement la classe d'implémentation et la classe d'objets avec tous les accesseurs?

+1

Nous avons utilisé python et les modèles de guépard pour un moteur de génération de code d'impact assez faible. Nous écrivons des analyseurs simples en python qui prennent les données et les préparent et le remplissage se fait via des modèles de guépard http://www.cheetahtemplate.org/ –

Répondre

1

Vous n'avez généralement pas à implémenter copy ctor ou operator = lors de l'utilisation de QSharedData/Pointer. La valeur par défaut implique copier/assigner le membre dérivé de QSharedData, qui fait généralement la bonne chose (TM). Pour la classe publique, vous devez implémenter le ctor créant l'objet privé, et si la classe privée n'est pas déclarée dans l'en-tête mais dans l'implémentation (ce qui est mieux), un dtor (ne rien faire, le seul point est pas inline et défini dans le .cpp, après la déclaration privée). Pour la classe privée, aucune implémentation de méthode/ctor/dtor n'est nécessaire. Pour les classes basées sur des valeurs simples, les setters d'écriture sont bien sûr fastidieux, mais il en est de même si vous utilisez des variables de membre privé. Les frais généraux dans LOC ne croissent pas avec le nombre de membres. Et non, il n'y a pas de solution de générateur standard à ce que je sache, bien qu'écrivant un script ou une macro emacs, etc. ce n'est pas si difficile. Probablement serait logique d'ajouter de telles choses à une boîte à outils disponible publiquement, ou QtCreator ...

1

Je ne pense pas que les générateurs existeraient pour ces choses, mais je suggère deux choses:

les deux sous-classes ont des exemples simples qui montrent comment mettre en œuvre la ness partagée, il semble. Je ne peux pas vous aider davantage, parce que je n'ai jamais eu le besoin de créer le mien. À la réflexion, pourquoi ne pas rendre publics tous les champs de données et utiliser la dérivée QSharedData comme une classe semblable à une structure avec le comptage des références? Peut-être pas agréable sur l'encapsulation, mais si vous êtes prudent, rien de mal ne devrait arriver.

Questions connexes