J'ai le code suivant:
MapType g_mapping = { {"POST_MASTER", MessageDeliveryMethod::POST_MASTER}, {"BUBBLE", MessageDeliveryMethod::BUBBLE}, };
3 Réponses :
Ainsi, la première paire d'accolades permet d'initialiser les éléments de données de la structure qui est la matrice.
La deuxième paire d'accolades est utilisée pour initialiser la matrice dans la structure.
Et les troisièmes paires d'accolades sont utilisées pour initialiser chaque objet de type stdd :: paire. P> Pour être plus précis, alors selon la norme C ++ (23.3.2.1 Vue d'ensemble de la matrice de classe) P> < BlockQuote>
2 Un tableau est un agrégat (8,5,1) pouvant être initialisé avec le
Syntaxe p>
blockQuote> où l'initialiseur-liste est une liste séparée par des virgules allant jusqu'à N éléments
dont les types sont convertibles à t. p>
blockQuote> p> std :: Array code> est défini comme une structure contenant un tableau.
Merci, ça a du sens. Cela semble être une question de conception de std :: tableau code> alors. Je suggérerais que cela pourrait être résolu en fournissant simplement une surcharge de constructeur pour
std :: initializer_list code> mais cela en ferait un type non agrégé, comme c'est nécessaire. Je ne sais pas quelle serait la solution, mais c'est un peu maladroit à utiliser comme il est maintenant.
Dans la norme, nous avons 23.3.2.1 (3) P>
Un tableau est un agrégat (8.5.1) pouvant être initialisé avec la syntaxe p>
array
a = {initialisateur-liste}; code> p> blockQuote> Ceci indique que lorsque vous initialisez la matrice avec une liste d'internauteur, vous devez envelopper les accolades. P>
"Où initialisateur-liste i> est une liste séparée par une virgule allant jusqu'à N éléments dont les types sont convertibles à T."
C ++ 14 vous permet de "aplatir" les listes lors de l'initialisation des agrégats imbriqués, comme décrit dans la page que vous portez à. p> std :: Array code> est défini comme un agrégat imbriqué - une classe contenant un tableau comme seul membre. Avant la C ++ 14, l'initialisation globale requise Deux niveaux d'accolades: une pour entourer la liste des membres de la classe (dans laquelle il n'y avait qu'un membre, le tableau) et une pour entourer la liste des éléments de tableau. Ensuite, vous avez besoin d'un troisième niveau si, comme ici, vous souhaitez réperinaliser chaque élément de tableau. P>
std :: paire code> n'est pas un agrégat.
@Remyabel: Non, ce n'est pas le cas; Mais il peut toujours être initialisé. Je décrivais pourquoi vous avez besoin des deux niveaux d'accolades extérieurs, pas ceux autour de chaque paire code> initialisateur.
Il y a beaucoup de doublons sur STD :: Array nécessitant deux ensembles d'accolades, mais dans ce scénario spécifique, vous ne pouvez pas omettre de bretelles.
@Remyabel: Vous pouvez remplacer ceux autour de chaque paire avec une autre forme d'initialisation. Je ne suis pas tout à fait sûr de ce que vous essayez de faire; Ma lecture de la question est que cela pose des questions sur les deux paires extérieures. Désolé si vous auriez préféré que je trouve un duplicata plutôt que de répondre directement à la question.
Ce que je voulais dire par le commentaire en double était que cette question semblait différente, car elle impliquait un type non agrégat, la réponse devrait donc être différente en conséquence.
@Remyabel: OK. J'ai ajouté une note que le troisième niveau est de répertorier chaque membre de la matrice.
PlusOne pour le titre. L'élision de la corset est vraiment une ... discrace?
J'ai édité mon message pour clarifier pourquoi je ne pense pas que ce soit un duplicata. Les modérateurs / communautés de So ont eu très mal au sujet des questions de clôture prématurément en tant que duplicats au lieu d'envisager les perspectives de tous les autres.
Arriver de différents angles est le but de garder les questions en double sur le site. Ce n'est pas un problème que cela conduit à des réponses existantes.