dire que j'ai construit une classe code> (notes de code> (notes de musique) ( Si l'utilisateur souhaitait utiliser un FIRAP, il / elle aurait besoin de créer un Quoi serait possible (et le recommandé) moyen d'y parvenir? p> 1) Utilisation d'un fichier d'en-tête avec 2) fournissant des méthodes de classe statique comme Autres solutions? P> p> note.h code>, note.cpp code>) et voulait fournir à l'utilisateur de fournir à l'utilisateur Ma bibliothèque avec un ensemble d'objets code> Note code> les plus couramment utilisés NOTE ("F '," SHARP ") CODE> objet, mais pour des raisons de simplicité, je souhaite fournir les notes racines les plus courantes en tant qu'objets. P> extern code> déclarations et un fichier de mise en œuvre correspondant? (Peut-être même le note.h code>, note.cpp code> fichiers?) P> note Note :: A () {Remettre la note ('a');} code> etc. (bien que cette approche soit à verbeuse pour mon goût ...). p>
3 Réponses :
Si C ++ 17 est disponible et la commande d'initialisation statique n'est pas un problème, j'irais avec les variables code> inline code>. Si C ++ 17 n'est pas disponible, la commande d'initialisation statique n'est toujours pas un problème, j'irais avec S'il existe des problèmes d'ordre d'initialisation statique, j'irais avec peu de fonctions d'assistance statique, comme la vôtre. P> extern code> déclarations et définitions dans le fichier .cpp. P>
Puis-je suggérer d'ajouter un littéral attribué à l'utilisateur Consexpr au mix? Ce serait une belle syntaxe jouer ("A #" _ n + "fb" _n, 1s); code> :)
@Yssc, vous pouvez, mais je ne ferais pas cela))). La raison en est que je suis fatigué des problèmes d'assurance générale soudaines lorsqu'il est complètement inscrit à l'utilisateur du code que les littéraux Constexpr deviennent de plus en odr.
Qui serait?!?
Vous pouvez utiliser une variable de membre statique dans votre classe de note. Peut-être une carte avec {Note-Type -> Count} serait suffisant? Vous devrez gérer les compteurs de vos constructeurs, mais il sera invisible à l'utilisateur de votre classe. Ensuite, vous pouvez ajouter des méthodes d'accès statiques pour les utilisateurs à extraire des données. N'oubliez pas de protéger l'accès à la carte statique si vous ou vos utilisateurs sont multi-threads. P>
aller pour littéraux définis par l'utilisateur 1 sup >: play("A#"_note + "Fb"_note + "G"_note, 1s);
Nice, je n'ai jamais entendu parler de ce concept et je vais certainement creuser plus loin dans cela, merci!
Développer une bibliothèque est la tâche la plus complexe (beaucoup plus difficile que de développer une application). Il y a trop de variantes et je doute qu'il existe une manière "recommandée". Cela dépend de la conception de la bibliothèque entière.
Enum code> s semble être fait pour cela. (Pour le paramètre du constructeur, je veux dire)Vous êtes peut-être intéressé d'examiner le Motif de poids volé i> .