Secondo le specifiche ISO C++, § 26,2/2:Perché C++ richiede che il complesso venga istanziato solo per float, double o long double?
L'effetto di istanziare modello
complex
per qualsiasi tipo diverso dafloat
,double
olong double
è specificato.
Perché gli autori standard aggiungono esplicitamente questa restrizione? Ciò lo rende non specificato, ad esempio, cosa succede se si effettua complex<int>
o complex<MyCustomFixedPointType>
e sembra una restrizione artificiale.
C'è una ragione per questa limitazione? C'è una soluzione alternativa se vuoi istanziare complex
con il tuo tipo personalizzato?
Sto principalmente chiedendo questa domanda a causa di this earlier question, in cui l'OP era confuso sul motivo per cui abs
stava dando uscite bizzarre per complex<int>
. Detto questo, questo non ha ancora senso dato che potremmo anche voler fare numeri complex
di tipi a punti fissi, numeri reali con maggiore precisione, ecc.
Ho dovuto ridere dopo aver visto la tua risposta precedente, ma è davvero una buona domanda. – chris
@ chris- Mi sentivo male a dare quella risposta senza essere in grado di dare una ragione di alto livello per questo. Di solito sono bravo a dire "questo è un caso bizzarro di C++ per i motivi X, Y e Z", ma questa volta non ho idea di cosa succede. – templatetypedef
"Il complesso di standardizzazione è stato discusso ininterrottamente nel comitato per oltre un decennio e esiste una resistenza significativa da parte di almeno un fornitore per supportarlo." http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-March/020398.html –