Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-05-2005, 10:02   #1
Morpheus_/_Neo
Member
 
Iscritto dal: Aug 2002
Messaggi: 154
C++ creare instanze di oggetti dalla stringa del nome della classe

ciao a tutti.

come da titolo, vorrei sapere se in c++ e' possibile creare un'istanza di oggetto di una classe NOME_CLASSE avendo solo la stringa "NOME_CLASSE".

mi spiego meglio. In Java esiste il metodo statico newInstance(string X) che crea un oggetto di tipo X e ritorna una referenza di tipo Object che punta all'istanza creata. Vorrei sapere se esiste in c++ qualcosa di analogo per creare oggetti a runtime senza conoscerne la classe a design time.

grazie a tutti
M_/_N
Morpheus_/_Neo è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 11:59   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Che io sappia non c'è...in primo luogo perchè non tutti gli oggetti derivano da un oggetto base...

Fai una cosa di questo tipo...ti crei un oggetto base per tutti i tuoi tipi di oggetti (suppongo che gli oggetti che vuoi instanziare siano oggetti personalizzati)...
Codice:
class classe_base //classe base astratta
{
public:
   classe_base() {}; //costruttore di default
   virtual string tipo_classe() = 0; //funzione virtuale pura
};

class classe1: public classe_base //classe derivata da quella base
{
public:
   classe1() { };
   virtual string tipo_classe() { return "classe1"; };
};

class classe2: public classe_base //classe derivata da quella base
{
public:
   classe2() { };
   virtual string tipo_classe() { return "classe2"; };
};


//in oggetto è contenuto il tipo di oggetto da instanziare

classe_base *nuovo = NULL;

if(oggetto == "classe1") nuovo = new classe1;
if(oggetto == "classe2") nuovo = new classe2;
Il comportamento è simile a quello che cercavi...ma devi stare attento all'interfaccia... Se l'interfaccia è comune per tutte le classi e dichiari tutte le funzioni come viertuali nella classe base allora potrai usare indistintamente le classi a partire dalla classe base. Se non è così devi riconoscere se una istanza è quella dalla classe da te voluta tramite la funzione tipo_classe e poi fare un cast alla classe voluta...
Ad esempio:
Codice:
if(obj->tipo_classe == "classe1")
   ((classe1 *)obj)->funzione_della_classe1(.....);
if(obj->tipo_classe == "classe2")
   ((classe2 *)obj)->funzione_della_classe2(.....);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 15:23   #3
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Morpheus_/_Neo
ciao a tutti.

come da titolo, vorrei sapere se in c++ e' possibile creare un'istanza di oggetto di una classe NOME_CLASSE avendo solo la stringa "NOME_CLASSE".

mi spiego meglio. In Java esiste il metodo statico newInstance(string X) che crea un oggetto di tipo X e ritorna una referenza di tipo Object che punta all'istanza creata. Vorrei sapere se esiste in c++ qualcosa di analogo per creare oggetti a runtime senza conoscerne la classe a design time.

grazie a tutti
M_/_N
Quello che cerchi di fare si chiama Reflection ed e' un concetto nativo di piattaforme quali Java e .NET (C# e parenti), oppure di linguaggi dinamici tipo Smalltalk, Python, Ruby.

Il C++ non supporta Reflection nativamente, e bisogna programmarsela a mano.
Cionci ti ha gia' indicato un modo per programmare quello che vuoi fare, che va benissimo se hai poche classi. Se il tuo sistema ha bisogno di supportare molte piu' classi, ti serve qualcosa di piu' flessibile, ma fino a quel momento l'implementazione di Cionci va benissimo.

Se ci dici con piu' precisione quello che vuoi fare possiamo esserti piu' di aiuto e magari indicarti implementazioni piu' flessibili (e complesse) se necessario.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 17:29   #4
Morpheus_/_Neo
Member
 
Iscritto dal: Aug 2002
Messaggi: 154
instanto grazie a tutti e due!

vediamo allora di porre il vero problema che devo risolvere...

ho N processi (che chiamero' MONITORATI) i quali danno in output degli oggetti di tipo ignoto a prori. Ho inoltre un processo MONITOR che si aggancia agli N monitorati tramite mem condivisa e deve estrarre gli oggetti che ogni processo da' in output.

ora di processi monitor ne posso avere M, ognuno in ascolto su gruppi eterogenei di processi, e non so a priori l'interfaccia dell'output proprio perche' ogni processo monitorato e' indipendente dagli altri mentre io voglio un processo monitor generalizzato.

tra le varie cose mi era venuto in mente il discorso di creare oggetti dalla stringa della loro classe, ma per il momento mi sto orientando verso qualcosa di molto piu a basso livello: leggere la mem condivisa byte a byte e interpretare e ricomporre i byte in base alle info pubblicate in un file. tali info descrivono per ogni processo il tipo e la disposizione delle variabili date in output (questo almeno devo saperlo a priori).

ecco qua il vero problema :-) se qualcuno ha qualche idea brillante... beh, intanto si becca un GRAZIE maiuscolo :-D

ciao e grazie ancora
M_/_N
Morpheus_/_Neo è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 17:33   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma i processi monitorati li fai tu ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2005, 19:40   #6
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Morpheus_/_Neo
ora di processi monitor ne posso avere M, ognuno in ascolto su gruppi eterogenei di processi, e non so a priori l'interfaccia dell'output proprio perche' ogni processo monitorato e' indipendente dagli altri mentre io voglio un processo monitor generalizzato.
Agli oggetti restituti da ogni processo puoi mandare messaggi e fargli compiere operazioni, oppure devi solo interrogarli per conoscerne le proprieta'?

Espando un po' la domanda di Cionci:
Quanti tipi diversi di processi hai? Prevedi di aggiungere in seguito altri tipi di processi? Puoi fare a meno di doverne aggiungere altri in seguito, quanto meno nella prima versione del tuo programma?

Riesci facilmente ad estrarre un'interfaccia comune a tutti i tipi di oggetto restituiti processi? Se no puoi cambiare leggermente le specifiche di modo da riuscirci?

In base alle risposte che dai, io avrei in mente un paio di soluzioni diverse.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2005, 13:37   #7
Morpheus_/_Neo
Member
 
Iscritto dal: Aug 2002
Messaggi: 154
allora, il problema e' proprio che i processi da monitorare non sono sviluppati ne specificati da me. io devo prenderli cosi come sono e leggerne l'output senza potergli far fare niente (i processi comunicano tra loro e il monitor deve essere il piu trasparente possibile per tali processi).

i processi dovrebbero essere 10 o 12 in un ambiente distribuito per cui ci sara' un monitor per macchina e ogni monitor sara' responsabile per un numero ignoto a priori di processi. inoltre ci sara' un monitor centralizzato che raccoglie le informazioni prelevate e inviategli dai singoli monitor dislocati sulle singole macchine.

non ho idea di cosa i vari processi daranno in output... so che saranno cose tipo array di double, matrici di int o double o numeri complessi (ma spero di no), ma purtroppo l'organizzazione del progetto fa talmente schifo che non posso escludere a priori che i processi scambino oggetti complessi... non so neanche che variabili elementari useranno... e i monitor devono essere general-purpose a sufficienza da fregarsene del processo specifico che stanno monitorando (potranno solo leggere da qualche parte una qualche descrizione dell'output del processo monitorato, ma ogni monitor avra' in carico piu' di un processo alla volta, e quindi non posso fare un monitor specifico per ogni processo... anche perche' diventerei stupido...). inoltre poiche' questi processi devono controllare un veicolo privo di pilota, hanno necessita' real time tali da non permettermi di fare grossi magheggi, quindi ho bisogno di roba leggera e veloce...

grazie mille a tutti per la disponibilita', davvero!
M_/_N
Morpheus_/_Neo è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2005, 22:46   #8
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Cerco di riassumere le specifiche per quello che ho capito:

1) Il monitor deve leggere dati dagli oggetti processi
2) Il monitor non deve dare comandi agli oggetti processi
3) La descrizione dei dati associati ad ogni tipo di oggetto processo e' contenuta in un qualche formato che e' disponibile
4) I tipi dei dati possono essere potenzialmente qualunque (nativi o complessi)
5) Il monitor deve essere abbastanza generico da gestire oggetti processo con tipi di dato differenti

Date le specifiche, il tuo problema e' un bel casino
Io cercherei di semplificarlo un po', inserendo qualche limitazione, ad esempio al punto 4). Se sei in grado di limitare i tipi dei dati, la soluzione al tuo problema diventa piuttosto semplice, un dizionario chiave/valore in cui organizzare i dati dei processi. La descrizione del dizionario e' contenuta nel file di descrizione.

Se non puoi mettere limiti ai tipi di dato, il tuo problema diventa molto complicato da risolvere in un linguaggio tipo C++ che non ha il concetto di "tipo dinamico".

Vedi se riesci a mettere una qualche limitazione al punto 4 e poi dimmi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2005, 21:01   #9
Morpheus_/_Neo
Member
 
Iscritto dal: Aug 2002
Messaggi: 154
grazie mille ragazzi, davvero!

dunque ammesso e non concesso che io riesca a limitare il tipo di dati scambiati ai soli tipi elementari (int, double, array e matrici di int o di double), la soluzione che mi viene in mente e' leggere l'area di memoria condivisa byte a byte e poi ricomporre i byte secondo le info pubblicate che descrivono la struttura delle variabili nell'area di mem stessa. e' una buona soluzione o si puo' fare di meglio?

grazie di cuore a tutti
M_/_N
Morpheus_/_Neo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Android Auto, il nuovo lettore porta in ...
I nuovi MacBook con display OLED potrebb...
Windows 11: l'aggiornamento KB5124010 fa...
iPhone Duo, la pellicola protettiva del ...
Memorie più costose, NVIDIA aumen...
TSMC potrebbe affiancare Intel nel proge...
Windows 11, un solo simbolo può risparmi...
Niente cloud, niente abbonamenti, niente...
Prime o meno, Amazon è piena di o...
Kindle in offerta: e-reader base a 89€ e...
Hackerato l'account ufficiale Microsoft ...
Tutti i dispositivi Ring: videocamere 2K...
Memorie HBM, la domanda si concentra su ...
Dash cam 70mai 4K da 74,99€: A800 Nano, ...
Nuovi rincari da Fastweb: l'operatore ha...
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: 01:11.


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