Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
OnePlus risponde alle esigenze di chi cerca un dispositivo indossabile dalle dimensioni contenute con OnePlus Watch 3 43mm. La versione ridotta del flagship mantiene gran parte delle caratteristiche del modello maggiore, offrendo un'esperienza completa in un formato compatto. Il suo limite più grande è abbastanza ovvio: l'autonomia non è il punto di forza di questo modello, ma si raggiungono comodamente le due giornate piene con un uso normale.
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C rappresenta l'ultima incarnazione della categoria dei tablet E Ink a colori di Onyx, e combina le prestazioni di un dispositivo Android con l'ottima tecnologia Kaleido 3 per il display. Con schermo da 10,3 pollici, un processore Qualcomm Snapdragon 750G e 6 GB di RAM, promette un'esperienza completa per lettura, scrittura e produttività. Il prezzo lo posiziona nel segmento premium, ma questo dispositivo è un vero spettacolo!
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


Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
ASUS Vivobook in super sconto: 4 portati...
Rinnovabili anche per l'esercito: Fort P...
Dreame A2 è un robot tagliaerba s...
Dreame L40 Ultra AE è nuovo, aggi...
Tesla permuta il Cybertruck a un prezzo ...
Netflix ai partner: "Usate l'AI? Se...
NVIDIA blocca la produzione dei chip H20...
Marchi prestigiosi a prezzi da outlet su...
Upgrade PC a prezzi mai visti: Amazon sc...
Offerte Tado su Amazon: valvole termosta...
MSI Cyborg 15 con GeForce RTX 4060 e i7 ...
MacBook Air 2025 chip M4 a 949€, ma occh...
La sonda spaziale NASA New Horizons (che...
HONOR MagicPad 3: il tablet con Snapdrag...
Qualcomm mischia le carte: in arrivo ci ...
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: 08:15.


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