Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-08-2006, 16:45   #1
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
[C++ estremo] derivare classe template da un'ADT non template + polimorfismo

(serve per lavoro) mi è venuta quest'idea;
Vorrei sapere se esistono controindicazioni derivando una classe template da una classe astratta NON TEMPLATE e usando il polimorfismo (nella fattispecie usare una puntatore a classe (astratta) per istanziare istanziazioni del template e biding dinamico sulle istanze delle istanziazioni......)
compilare compila....ma non tutto cioè che compila funziona (mentre cioè che funziona sicuramente compila ).
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2006, 17:03   #2
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
dimenticavo: nella classe template derivata c'è un template dell'STL che va istanziato con lo stesso tipo che istanzia la classe template derivata
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2006, 22:07   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da BountyKiller
compilare compila....ma non tutto cioè che compila funziona (mentre cioè che funziona sicuramente compila ).
e allora tu controlla che funzioni, così automaticamente compila anche
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 10-08-2006, 09:38   #4
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
penso di esserci riuscito.....
finora non ho trovato controindicazioni.
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 10:40   #5
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
confermo che funziona e che al momento non vedo altri modi per utilizzare il polimorfismo con classi template.....se la classe base (adt o no) è anch'essa una classe template non è possibile istanziare un 'istanziazione template di classe derivata utilizzando un puntatore alla classe base template (almeno così afferma stoutrup...... con le classi non template invece si può, ovviamente)
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 10:51   #6
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da BountyKiller
istanziare istanziazioni del template e biding dinamico sulle istanze delle istanziazioni

Ultima modifica di AngeL) : 29-08-2006 alle 10:55.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 11:31   #7
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
"il c++ è un linguaggio a riga di comando...come può gestire la grafica ??"

non la scorderò mai
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 11:36   #8
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da BountyKiller
"il c++ è un linguaggio a riga di comando...come può gestire la grafica ??"

Premetto che oggi sono stanco, ma non capisco questo 3d... sembra un monologo di pensieri
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 11:38   #9
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da BountyKiller
"il c++ è un linguaggio a riga di comando...come può gestire la grafica ??"

non la scorderò mai
non ricordavo che c'eri anche tu
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 12:07   #10
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da BountyKiller
"il c++ è un linguaggio a riga di comando...come può gestire la grafica ??"
Se usi la macchina da scrivere può essere un problema
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 13:12   #11
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
Quote:
Originariamente inviato da Marco Giunio Silano

Premetto che oggi sono stanco, ma non capisco questo 3d... sembra un monologo di pensieri
era una richiesta ai guru di questa sezione per sapere se avevano mai provato a fare quello che ho fatto io e che non ho trovato in nessun libro..... in particolare mi interessava sapere se c'erano controindicazioni di qualche tipo e pare di no (pare perchè nessuno ha risposto)
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 17:00   #12
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da BountyKiller
era una richiesta ai guru di questa sezione per sapere se avevano mai provato a fare quello che ho fatto io e che non ho trovato in nessun libro..... in particolare mi interessava sapere se c'erano controindicazioni di qualche tipo e pare di no (pare perchè nessuno ha risposto)
Se non ho capito male è più o meno quello che ho fatto io per istanziare a runtime una classe template, nel mio caso un Buffer che al suo interno contiene una Queue. Io per ora non ho trovato controindicazioni di sorta.
Tra l'altro mi sembra un qualcosa che può risultare utile in diverse occasioni, non capisco perchè su internet non si trovi praticamente niente a riguardo.
Anch'io avevo chiesto tempo fa sul forum informazioni sull'argomento, ma non ottenni risposta.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2006, 17:51   #13
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
a me ha risparmiato di scrivere una ventina di classi praticamente tutte uguali....davvero una buona cosa....penso tu possa facilmente immaginare la difficoltà di gestire così tante classi in caso di bachetti o aggiunte..... i template a volte sono veramente utilissimi.....
resta da capire perchè non si possa utilizzare il polimorfismo con una classe base template...questo ancora non sono riuscito a capirlo....
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2006, 09:07   #14
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da BountyKiller
era una richiesta ai guru di questa sezione per sapere se avevano mai provato a fare quello che ho fatto io e che non ho trovato in nessun libro..... in particolare mi interessava sapere se c'erano controindicazioni di qualche tipo e pare di no (pare perchè nessuno ha risposto)
eheheh capisco, cmq seguo curioso l'evolversi della questione
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2006, 16:47   #15
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
confermo dopo ulteriori test che l'idea funziona, l'unica cosa che non mi piace tanto è il fatto che il tipo di ritorno e i parametri dei metodi virtuali puri devono essere dei void* (almeno io non ho trovato altri modi di "fregare" il compilatore ) invece del parametro della classe template derivata (come verrebbe naturale pensare), e questo mi costringe a fare un sacco di cast.... magari dopo posto un po' di codice (non posso postare quello originale perchè è roba di lavoro e sono tenuto al riserbo... ) adattato per far capire qual'è il problema....

ogni suggerimento sarà bene accetto, avevo intenzione di wrappare questi cast con un'ulteriore derivazione , ma questo è un palliativo perchè i cast ci sono sempre!
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2006, 00:17   #16
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da BountyKiller
(serve per lavoro) mi è venuta quest'idea;
Vorrei sapere se esistono controindicazioni derivando una classe template da una classe astratta NON TEMPLATE e usando il polimorfismo (nella fattispecie usare una puntatore a classe (astratta) per istanziare istanziazioni del template e biding dinamico sulle istanze delle istanziazioni......)
compilare compila....ma non tutto cioè che compila funziona (mentre cioè che funziona sicuramente compila ).
Vediamo se ho capito il problema:
tu ha una classe base non template come la seguente
Codice:
class Base {
  virtual void* foo() = 0;
};
e vuoi derivarla nel seguente modo
Codice:
template <typename T>
class Derived<T> : Base {
  void* foo(){ /* blah */ }
};
per fare cose come la seguente
Codice:
vector<Base*> v(10);
v[0] = new Derived<int>();
v[1] = new Derived<float>();
...
v[1]->foo();
Ho capito bene ? In questo caso non ci sono problemi nel farlo
Il problema del dover ritornare void* e' dovuto al fatto che le funzioni devono avere lo stesso tipo, forse potresti usare una classe base comune (nel tuo caso probabilmente proprio Base) al posto di void*.
Codice:
class Base {
  virtual Base* foo(Base*) = 0;
};

template <typename T>
class Derived<T> : Base {
  Base* foo(Base* arg);
};

vector<Base*> v(10);
v[0] = new Derived<int>();
v[1] = new Derived<float>();
...
v[1]->foo(0);
O forse mi sfugge qualcosa (come e' probabile, non son sicuro di aver capito bene cosa intendi per "puntatore a classe") ?
[disclaimer]: E' un bel po' che non programmo regolarmente in C++, perdonate eventuali errori e/o omissioni nel codice
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2006, 10:06   #17
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
il problema è esattamente quello, e anch'io avevo pensato alla tua stessa soluzione prima di accorgermi che in quel modo modo si instaura un fenomeno ricorsivo infinito... appena ho tempo posto un codicillo che illustra il problema


Quote:
Originariamente inviato da marco.r
Vediamo se ho capito il problema:
tu ha una classe base non template come la seguente
Codice:
class Base {
  virtual void* foo() = 0;
};
e vuoi derivarla nel seguente modo
Codice:
template <typename T>
class Derived<T> : Base {
  void* foo(){ /* blah */ }
};
per fare cose come la seguente
Codice:
vector<Base*> v(10);
v[0] = new Derived<int>();
v[1] = new Derived<float>();
...
v[1]->foo();
Ho capito bene ? In questo caso non ci sono problemi nel farlo
Il problema del dover ritornare void* e' dovuto al fatto che le funzioni devono avere lo stesso tipo, forse potresti usare una classe base comune (nel tuo caso probabilmente proprio Base) al posto di void*.
Codice:
class Base {
  virtual Base* foo(Base*) = 0;
};

template <typename T>
class Derived<T> : Base {
  Base* foo(Base* arg);
};

vector<Base*> v(10);
v[0] = new Derived<int>();
v[1] = new Derived<float>();
...
v[1]->foo(0);
O forse mi sfugge qualcosa (come e' probabile, non son sicuro di aver capito bene cosa intendi per "puntatore a classe") ?
[disclaimer]: E' un bel po' che non programmo regolarmente in C++, perdonate eventuali errori e/o omissioni nel codice
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2006, 16:35   #18
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da BountyKiller
confermo dopo ulteriori test che l'idea funziona, l'unica cosa che non mi piace tanto è il fatto che il tipo di ritorno e i parametri dei metodi virtuali puri devono essere dei void* (almeno io non ho trovato altri modi di "fregare" il compilatore ) invece del parametro della classe template derivata (come verrebbe naturale pensare), e questo mi costringe a fare un sacco di cast.... magari dopo posto un po' di codice (non posso postare quello originale perchè è roba di lavoro e sono tenuto al riserbo... ) adattato per far capire qual'è il problema....

ogni suggerimento sarà bene accetto, avevo intenzione di wrappare questi cast con un'ulteriore derivazione , ma questo è un palliativo perchè i cast ci sono sempre!
Mi ero dimenticato del thread...

Questa è la soluzione che ho adottato io:
Codice:
class Base
{
private:
   Base * mDerived;
public:
   template <typename T> int Get(T*x, int nElements)
   {
      return ((Derived<T>*) mDerived)->Extract(x, nElements);
   }
}

template <class T> class BaseT : public Base
{
private:
    queue<T> mQueue;
public:
    int Extract(T * x, int nElements)
    {
       //estrai da mQueue nElements se possibile, inseriscili in x e ritorna il numero di elementi estratti dalla coda.
    }
}
Non mi è venuto in mente niente di meglio per cercare di istanziare una classe template a run-time.
Rimane sempre un cast al tipo della classe derivata, ma viene automaticamente determinato dal metodo template invocato. Senza cast non mi riesce.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2006, 12:20   #19
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
eccomi qua...sono rientrato dopo due settimane di ferie
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Il telescopio spaziale James Webb ha cat...
Il razzo spaziale europeo Ariane 6 lance...
Il lander lunare Blue Origin Blue Moon M...
Gli LLM riescono a risolvere problemi ma...
Smettila con quei cioccolatini. Per San ...
Il secondo lancio del razzo spaziale eur...
MaiaSpace ed Eutelsat stringono un accor...
Motorola edge 60 neo sorprende: compatto...
Zeekr 007 e 007GT si aggiornano: piattaf...
ASUS ROG Swift OLED PG27AQWP-W: 720 Hz e...
È super il prezzo del robot rasae...
MediaTek aggiorna la gamma di Dimensity:...
Foto intime sottratte dai telefoni in ri...
In Cina approvate nuove regole per il ri...
L'accordo multi-miliardario tra Google e...
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: 20:53.


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