Newsgroup: it.comp.lang.c++
Titolo: emulare le restrizioni "WHERE" nei template (QTCreator)

 
salve, sto usando QTCreator su Debian (btw : spaziale 
l'ide!), vorrei che qualcuno provasse a spiegarmi come 
implementare RESTRIZIONI di tipo nell'uso dei template
 
premetto che ho letto alcuni tutorials e risposte che 
menzionano roba recente tipo "enable_if" "is_integral" (cito 
senza controllare) ma non erano esempi abbastanza semplici e 
non li ho capiti.
 
Ci sono due scenari distinti che vorrei poter gestire
1) restrizioni basate su regole/caratteristiche (non su 
interfacce come VStudio ma il concetto è quello : ad es. mi 
lasciava usare restrizioni tipo IComparable e IConvertible, 
con la clausola WHERE aggiunta al template, che significava 
concettualmente : limita i tipi istanziabili a quelli che 
implementano nativamente o reimplementano una certa interfaccia)
 
2) aggiungere restrizioni tipo : permetti di istanziare solo 
per determinate classi menzionate in una lista
 
Per questo secondo modo stavo per conto mio pensando a una 
inelegante e goffissima soluzione basata su "union", nel 
senso che non delego il compilatore alla fase di 
specializzazione, ma includo nel template stessa un 
container "union" con tutti i tipi passati.
 
ovviamente non è una soluzione.
Se qualcuno fosse gentile da farmi un esempio almeno del 
primo tipo davvero minimale, di template che può venire 
creato se un suo "ennesimo" parametro typename è soltanto di 
tipo INTEGRAL (oppure meglio ancora NUMERIC) nativo e nessun 
altro tipo ....
 
grazie, scusate (so che il tema è stato dibattuto un po' 
ovunque ... ma non riesco a digerire le risposte purtroppo).
Oltretutto il mio C++ è datato e sto cercando solo da poco 
di portarlo a pari e mi sono accorto che in 15 anni è 
cambiato veramente molto
 
 
-- 
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
 

Il 27/01/19 03:44, Soviet_Mario ha scritto:

Ti do solo una dritta non l'esempio,almeno per ora.
Cerca enable_if con un motore di ricerca
In c++20 le cose dovrebbero cambiare ancora,semplificando le restrizione 
sui tipi dei template
 


si l'ho trovato su cppreference ... ma non riesco bene a 
capirne l'uso.
 
Tra l'altro non so esattamente sino a che standard supporta 
il compilatore più nuovo che ho installato qui (credo sia 
GCC-6 a 64 bit, che è la 6.3.0-18) ... debian non è 
particolarmente solerte nell'incorporare aggiornamenti.
 
cmq boh, non mi ci raccapezzo coi pochi esempi trovati di 
anable_if. O sono troppo complessi o trovo solo la teoria :(
 
mi fa piacere che si stia facendo avanti questa esigenza, 
che è un po' la quintessenza del type-checking applicato 
anche ai parametri definiti "altrove" rispetto al punto di 
dichiarazione.


Il 28/01/19 07:08, Soviet_Mario ha scritto:

Io trovo l'uso di enable_if per limitare i tipi di un template un 
qualcosa di barbaro
Il mio consiglio e' di non usarlo per un normale programma (si perde 
solo tempo)
Potrebbe avere senso per una libreria
Per fortuna,come avevo gia scritto,sembra che  in c++20 per questo le 
cose cambieranno in meglio attraverso i concepts
 
 

 
 
 


 
 
g++ e' gia allineato a c++20 anche se non completamente e sono 
attualmente futures in  fase sperimentale
Basta usare -std=c++2a o gnu++2a
 
https://gcc.gnu.org/projects/cxx-status.html
 
