Domanda

Come afferma la domanda, c'è una ragione per cui le persone usano la versione struct rispetto ai normali condizionali?

È stato utile?

Soluzione

Un estratto dalle Linee guida per la codifica Boost per espressioni costanti integrali :

Non utilizzare operatori logici nelle espressioni di costanti integrali; utilizza invece la meta-programmazione del modello.

L'intestazione contiene una serie di modelli di soluzioni alternative, che svolgono il ruolo di operatori logici, ad esempio invece di:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

Usa:

::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value

Razionale: un certo numero di compilatori (in particolare i compilatori Borland e Microsoft), tendono a non riconoscere le espressioni costanti integrali che coinvolgono operatori logici come espressioni costanti integrali autentiche. Il problema generalmente si manifesta solo quando l'espressione della costante integrale è annidata nel codice del modello ed è difficile da riprodurre e diagnosticare.

Quindi direi mai su un compilatore conforme. (Ma se hai bisogno di supportare compilatori non conformi, usalo.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top