"membro Variante" è definito in 9,5/8 di C++ 11:
Una classe unione simile è un sindacato o di una classe che ha un'unione anonima come membro diretto. Una classe X simile a un sindacato ha un insieme di membri varianti. Se X è un'unione, i suoi membri varianti sono i membri dati non statici; altrimenti, i suoi membri variante sono i membri di dati non statici di tutte le unioni anonime che sono membri di X.
In altre parole, tutti i membri di dati non statici di un'unione sono "membri variante", e per una classe che contiene unioni anonime, i loro membri di dati non statici sono "membri varianti" della classe.
Il contesto che hai citato è 12.1/5, dicendo che se una classe simil-unionista ha un membro variante con un costruttore predefinito non banale, allora il costruttore predefinito della classe stessa viene cancellato. Il problema è quale componente variante deve essere creato dal costruttore predefinito della classe e la soluzione non deve avere un costruttore predefinito. Se tutti i membri delle varianti hanno costruttori di base banali non c'è alcun problema, poiché non facendo nulla il costruttore predefinito della classe sta costruendo tutti/nessuno di loro allo stesso modo.
boost::variant
è una cosa separata. Non sarei troppo sorpreso se "alcuni siti" dicessero "membri varianti" quando significano "i possibili tipi che un dato boost::variant
può contenere", vale a dire i "membri" di quello variant
. Ma questo non è il significato recentemente definito nello standard C++ 11.
fonte
2012-07-17 15:51:29
Puoi pubblicare un link a uno di questi siti? – Praetorian
Stack Overflow stesso è uno di questi. – BlackVegetable
Stai parlando di 'boost :: variant' o qualcosa del genere? Tradizionalmente, una variante è un'unione che contiene tutti i tipi supportati. – chris