Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

emulare le restrizioni "WHERE" nei template (QTCreator)

11 views
Skip to first unread message

Soviet_Mario

unread,
Jan 27, 2019, 4:44:38 AM1/27/19
to

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)

enoquick

unread,
Jan 27, 2019, 8:55:44 AM1/27/19
to
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

Soviet_Mario

unread,
Jan 28, 2019, 8:08:27 AM1/28/19
to
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.

enoquick

unread,
Jan 28, 2019, 10:06:51 AM1/28/19
to
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


Soviet_Mario

unread,
Jan 28, 2019, 1:39:21 PM1/28/19
to
On 28/01/19 16:06, enoquick wrote:
> Il 28/01/19 07:08, Soviet_Mario ha scritto:
>> On 27/01/19 14:55, enoquick wrote:
>>> Il 27/01/19 03:44, Soviet_Mario ha scritto:
>>>>
CUT

>
>
> Io trovo l'uso di enable_if per limitare i tipi di un
> template un qualcosa di barbaro

eh sapessi fare la stessa cosa diversamente ...

cmq, circa la nuova "versione" 20, dove potrei trovare
qualche info su dove come e quando verrà introdotta ?

Che poi bisognerà aspettare anche che qualche compilatore
(io userò lo gnu) si allinei.

grazie delle info

> 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
>
>


enoquick

unread,
Jan 29, 2019, 3:31:50 PM1/29/19
to
Il 28/01/19 12:39, Soviet_Mario ha scritto:
> On 28/01/19 16:06, enoquick wrote:
>> Il 28/01/19 07:08, Soviet_Mario ha scritto:
>>> On 27/01/19 14:55, enoquick wrote:
>>>> Il 27/01/19 03:44, Soviet_Mario ha scritto:
>>>>>
> CUT
>
>>
>>
>> Io trovo l'uso di enable_if per limitare i tipi di un template un
>> qualcosa di barbaro
>
> eh sapessi fare la stessa cosa diversamente ...
>

Non si puo fare fino a c++17 compreso.
Si deve per forza usare enable_if

> cmq, circa la nuova "versione" 20, dove potrei trovare qualche info su
> dove come e quando verrà introdotta ?
>

Basta cercare c++20 concepts
Qualcosa dovresti trovare.


> Che poi bisognerà aspettare anche che qualche compilatore (io userò lo
> gnu) si allinei.
>

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
0 new messages