Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-10-2014, 15:08   #1
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
[C++] Restringere tipo template (come Java: <T extends Base>)

Ciao, so che non esiste un modo diretto per poter restringere il tipo che un parametro di un template può diventare. Quello che volevo chiedere è come ci si comporta in questi casi?
Voglio dire, io in java posso definire:
Codice PHP:
class Classe<extends Base>{} 
Dentro quella classe so che posso sicuramente (senza preoccuparmi di nulla), dato un attributo o una variabile di tipo T chiamare tutti i membri di Base. Certamente se poi vorrò qualcosa in più dovrò verificare il tipo e fare un casting.

In C++ si fa il casting normalmente o si chiamano metodi dati per scontato senza preoccuparsi di quale tipo sia il template? Considerato che il compilatore a volte da informazioni completamente generiche sull'errore commesso e quindi chi userà quel determinato codice potrebbe non capire.
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2014, 19:22   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Potresti usare le static_assertion di C++11 insieme ai type traits:

Codice:
#include <iostream>
#include <type_traits>

class Base
{
public:
    virtual void hello() = 0;
};

class Specific : public Base
{
public:
    virtual void hello() {
        printf("Hello World!\n");
    }
};

class Another {
    void hello() {
    }
};

template<class T>
class Wrapper
{
    T object;

public:

    Wrapper() {
        static_assert(std::is_base_of<Base, T>::value, "T must be a Base type");
    }

    void hello() {

        object.hello();
    }
};

int main(void)
{
    Wrapper<Another> w; // non compila (se usi Wrapper<Specific> compila)

    w.hello();

    return 0;
}
Output con Wrapper<Another>:

Codice:
example.cc: In instantiation of ‘Wrapper<T>::Wrapper() [with T = Another]’:
example.cc:44:22:   required from here
example.cc:33:9: error: static assertion failed: T must be a Base type
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2014, 20:25   #3
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
Molto interessante, ma rispetto a static_cast, è di molto più inefficiente?
Inoltre, static_assert sarebbe un costrutto del linguaggio che permette di generare un qualsiasi errore nel compilatore in base ad una condizione oppure è pensato per altro?

Grazie per l'aiuto.
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2014, 08:35   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Quote:
Originariamente inviato da biowep Guarda i messaggi
Molto interessante, ma rispetto a static_cast, è di molto più inefficiente?
Inoltre, static_assert sarebbe un costrutto del linguaggio che permette di generare un qualsiasi errore nel compilatore in base ad una condizione oppure è pensato per altro?

Grazie per l'aiuto.
Quello che ho riportato sopra è il metodo più sicuro (type safe) in quanto se passi un oggetto che non ha quella classe base non compila .

static_assert è una asserzione a compile time, ma la condizione dev'essere appunto verificabile a tempo di compilazione (in C++11 hanno anche introdotto la keyword constexpr che ti può aiutare nel costruire espressioni valutabili a tempo di compilazione).

In realtà anche static_cast dovrebbe fare dei controlli sul tipo a tempo di compilazione (sicuramente più che quelli del cast C classico), però dal mio punto di vista quella sopra è una soluzione più "elegante" .

Ultima modifica di WarDuck : 15-10-2014 alle 08:38.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Microsoft riporta in vita Surface Mouse ...
OpenAI porta le funzioni agentiche vocal...
La Cina indaga su DeepSeek e Moonshot: a...
Sono 68.450 gli oggetti oltre i 10 centi...
950 agenti, 210 milioni di token e 21 or...
Dopo quasi 40 anni l'Italia riapre al nu...
Apple Intelligence su macOS 27 potrebbe ...
NVIDIA prepara la grafica del futuro con...
YouTube annuncia nuovi strumenti per per...
Phishing a nome ACI sul bollo auto: una ...
3 mini-PC ASUS per usare l'intelligenza ...
YouTube punta sempre di più sull'...
SILENT HILL: Townfall è finalment...
Ora lo Starter Pack di Netatmo costa 92,...
MediaWorld celebra 35 anni di attivit&ag...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v