Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-01-2008, 11:29   #1
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
[C++] matrice punt a funzioni e dintorni ...

Non riesco a copiare una matrice di puntatori a funzione in un'altra matrice.
Quì il codice, in un modulo ho:

Codice:
typedef int LLLtgStates;

typedef void (*Buttons)(LLLtgStates [4][4]);

Buttons LtgButt[4][4] = 
{
	{ Button_0_0, Button_0_1, Button_0_2, Button_0_3 },
	{ Button_1_0, Button_1_1, Button_1_2, Button_1_3 },
	{ Button_2_0, Button_2_1, Button_2_2, Button_2_3 },
	{ Button_3_0, Button_3_1, Button_3_2, Button_3_3 }
};
Nell'altro voglio copiarmi il contenuto della matrice LtgButt in m_Buttons che è un membro di una classe, dichiarato come segue:
Codice:
Buttons     m_Buttons[4][4];
ho provato con una memcpy:
Codice:
memcpy( reinterpret_cast<void*>(m_Buttons), 
	reinterpret_cast<void*>(LtgButt), 
	sizeof(LtgButt) );
ma vedo che non va, il puntatore di m_Buttons[0][0] è <> da LtgButt[0][0]

allora ho provato con un for:
Codice:
for (int y = 0; y < 4; ++y)
	for (int x = 0; x < 4; ++x)
		m_Buttons[y][x] = LtgButt[y][x];
ma mi da un errore:
Quote:
pointer to a function used in arithmetic
dove sbaglio ?

grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 11:33   #2
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
ma che scemo!!!

appena inviata la domanda ho visto che nel modulo ho dichiarato
Codice:
extern Buttons LtgButt;
anzichè
Codice:
extern Buttons LtgButt[4][4];
vabbè, si può chiudere, grazie lo stesso
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 11:40   #3
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
a questo punto ne approfitto per una domandina:

avendo questi 2 tipi:
Codice:
typedef int LLDeviceId;
typedef void (*Buttons)(LLLtgStates [4][4]);
quindi 2 matrici di quei tipi:
Codice:
Buttons     m_Buttons[4][4]; //!< a matrix of pointers to functions
LLDeviceId  m_DevIds [4][4]; //!< a mtrix of device ids
posso fare una map dei 2 ?
quindi, in soldoni, si possono fare mappe di matrici ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 15:04   #4
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
Cioè intendi: si possono fare mappe a 2 dimensioni ? In tal caso la risposta è sì...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 15:19   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da cionci Guarda i messaggi
Cioè intendi: si possono fare mappe a 2 dimensioni ? In tal caso la risposta è sì...
non lo so neanche io, son completamente fuso! mi stan facendo fare una cosa allucinante! una logica di 30 pagine dove ci son 5 pannelli, ogni pannello 20 interruttori, ogni interruttore dipende dagli altri interruttori (anche di altri pannelli) e accende o spegne canali di comunicazione tra l'autista del carro armato o l'operatore o l'istruttore e vatte la pesca...
Poi ci sono le cuffie, i microfoni, i volumi, i led rossi, verdi, bianchi, switch BCD coded, frequenze Mh Kh e altro.
E devo fare sia il design che scrivere il codice. Entro Febbraio!

Ho fatto l'oggetto elemento, dentro l'oggetto device, dentro l'oggetto pannello e dentro l'oggetto unità.
Adesso nel pannello sto gestendo le devices (pulsanti) che son fisse, quindi ogni pulsante ha una funzione ed un ID.

Non ho più usato punt a funzione (stile C) ma a funzione di una classe.

Adesso vorrei collegare ogni ID al relativo puntatore, così quando mi arriva un msg con un certo ID, chiamo il relativo puntatore a membro senza doverlo cercare.

Potrei fare una matrice di IDs ma vorrei usare lo stesso sistema che ho usato nell altre classi (elemento, device etc) quindi mappe.

Non so se son stato chiaro ma son veramente fuso.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 18:48   #6
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
I puntatore a funzione ti sono serviti per associare una funzionalità ad un ID ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2008, 18:51   #7
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
Perché non usi un command pattern ?

Se non altro ti eviti di lavorare con i puntatori a funzione...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2008, 07:48   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché non usi un command pattern ?

Se non altro ti eviti di lavorare con i puntatori a funzione...
command pattern ?
dimmi dimmi

e scusa ma ieri alle 4 e mezza me ne sono andato a casa, troppo fuso (e a casa non ho internet)
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2008, 16:11   #9
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
Prima di tutto, visto che ora programmi ad oggetti ti consiglio di studiarti i design pattern Quando sarai riuscito ad implementarne qualcuno vedrai che ti aiuteranno molto.
Immaginiamo che tu abbia una class Button che gestisce lo stato del bottone (la semplifico, servirebbe magari anche il testo visualizzato, l'eventuale icona e così via):
Codice:
class Button
{
   Command *command;

public:
   Button(Command *command) { this->command = command };
   void pressed() { command->execute()}; 
  ~Button() { delete command; };
};
Questo è il command pattern applicato:
Codice:
class Command
{
public:
   virtual void execute() = 0; //questa funzione virtuale pura rende la classe astratta
};

//ora deriviamo i vari comandi
class CopyCommand: public Command
{
   System *mySystem;
public:
   CopyCommand(System *mySystem) { this->mySystem = mySystem; };
   virtual void execute() { mySystem->doACopy(); };  
};

class PasteCommand: public Command
{
   SecondSystem *otherSystem;
public:
   CopyCommand(SecondSystem *otherSystem) { this->otherSystem = otherSystem; };
   virtual void execute() { otherSystem->pasteIn(); };  
};

//quando andrai a creare i bottoni
Button myButton1(new CopyCommand(mySystem));
Button myButton2(new PasteCommand(otherSystem));
System e SecondSystem non c'entrano niente, li ho usato solo per far vedere come è possibile sfruttare i comandi per inizializzarli con "parametri" diversi.
Il codice da eseguire con un dato comando va messo dentro ad execute.
Ora...questa è un'associazione statica dei bottoni al comando...ma si può anche fare un'associazione dinamica. Sei i comandi sono senza stato possiamo andarci a creare un pool di comandi da assegnare dinamicamente ai bottoni:
Codice:
class Button
{
   Command *command;

public:
   Button(Command *command) { setCommand(command); };
   void pressed() { command->execute()}; 
   void setCommand(Command *command) { this->command = command; };
};

//mappa statica dei comandi, da deallocare alla fine dell'esecuzione
map<CommandType, Command *> commandMap;
commandMap[CommandType::Paste] = new PasteCommand(otherSystem);
commandMap[CommandType::Copy] = new CopyCommand(mySystem);

...

//inizializzazione dei bottoni
Button myButton1(commandMap[CommandType::Paste]);
Button myButton2(commandMap[CommandType::Copy]);

...

//quando vorrai cambiare la funzionalità di un bottone a runtime
myButton2.setCommand(commandMap[CommandType::Paste]);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2008, 16:36   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
ho letto al volo anche perchè a quest'ora son sempre fuso, ma sembra figo.

In realtà io non ho pulsanti veri, ma gestisco solo la logica dei pulsanti.

Hardware <-> interfaccia <-> Logica -> comunicazione

Io sono la Logica, quindi ricevo un input che è la pressione dei pulsanti, volumi etc e setto degli stati, rispondo al mittente con un output (accendi il led, alza il volume etc) e imposto una matrice di comunicazione (tizio parla con altro tizio, device accende registrazione).

Però quello che mi hai scritto può andare bene (e anche se non dovesse me lo salvo per la prossima) perchè non ho i pulsanti ma una funzione per ognuno di essi, quindi è come se li avessi.

Grazie mille caro, ne sai sempre una più del diavolo

domani rileggo e studio con calma, se ho dubbi ... tienti pronto

PS: era da un pò che non lo facevo ma devo dire che "disegnare" e programmare ad oggetti è una figata!
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2008, 17:45   #11
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
Ah ok...quindi i bottoni non li devi premere te, ma a te arriva un id ed in base a quell'id cambi lo stato dei pulsanti visualizzati.

Ad esempio, potresti filtrare i comandi per id, ma anche modificare dinamicamente il comportamento di risposta ad un certo id, ad esempio a seguito dell'arrivo di un dato id.

Ovviamente CommandType è un enum.
Codice:
class CommandFilter
{
    typedef Map<CommandType, Command *>::iterator CommandsIt;
    typedef Map<int, Command *>::iterator FilterIt;

    Map<int, Command *> filterMap;
    Map<CommandType, Command *> commandMap:
public:
    CommandFilter();
    void filter(int id, CommandType type);
    void applyCommand(int id);
    void applyCommand(CommandType type);
    ~CommandFilter();
};

CommandFilter::CommandFilter()
{
    commandMap[CommandType::Fisrt] = new FirstCommand(this);
    commandMap[CommandType::Second] = new SecondCommand();
    commandMap[CommandType::Third] = new ThirdCommand();
    ....
}

void CommandFilter::filter(int id, CommandType type)
{
    CommandsIt it = commandMap.find(type);
    if(it == map::end)
       throw new CommandNotLoadedException(type);

    filterMap[id] = it->second;
}

void CommandFilter::applyCommand(int id)
{
    FilterIt it = filterMap.find(id);
    if(it == map::end)
       throw new FilterNotLoadedException(id);

    it->second->execute();    
}


void CommandFilter::applyCommand(CommandType type)
{
    CommandsIt it = commandMap.find(type);
    if(it == map::end)
       throw new CommandNotLoadedException(type);

    it->second->execute();   
}

//inizializzazione del filtro
CommandFilter filter;

filter.changeFilter(0, CommandType::First);
filter.changeFilter(1, CommandType::Second);
filter.changeFilter(5, CommandType::Third);
filter.changeFilter(7, CommandType::Other);


//ad esempio un comando che va a cambiare la reazione del filtro ad un dato ID

class FirstCommand: public Command
{
   CommandFilter *commandFilter;
public:
   CopyCommand(CommandFilter *commandFilter) { this->commandFilter = commandFilter; };
   virtual void execute() 
   { 
       commandFilter->changeFilter(5, CommandType::Second);
   }  
};

//oppure un comand che va ad eseguire altri comandi

class SecondCommand: public Command
{
   CommandFilter *commandFilter;
public:
   CopyCommand(CommandFilter *commandFilter) { this->commandFilter = commandFilter; };
   virtual void execute() 
   { 
       commandFilter->applyCommand(CommandType::Third);
       commandFilter->applyCommand(CommandType::Other);
   }  
};


//ovviamente per filtrare un dato evento basta inserire:
filter.applyCommand(id);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 08:26   #12
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
azz! questo 3d me lo salvo e lo chiudo in cassaforte

come si vede che hai lavorato parecchio ad oggetti ... anche io sto usando typedefs, enums e mappe ovunque ma alla fine si vede che non ho questa dimestichezza in relazionare gli oggetti come te.

Il problema adesso sarebbe modificare ciò che ho già fatto e applicare il tuo sistema, ma non c'è tempo. Comunque per Febbraio (che poi in realtà è Marzo) dobbiamo presentare un prototipo funzionante, dopo avremo tempo per perfezionare il tutto. E, anche se non ho molta esperienza in object oriented modeling, se c'è una cosa in cui vado forte è lo scrivere codice facilmente mantenibile e modificabile quindi, ripeto, mi tengo questi consigli da parte per il futuro. E grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Questa sedia ergonomica da ufficio costa...
Il Samsung Galaxy A27 è quasi pronto: il...
Steam Deck 2, i tempi si allungano e, an...
Tesla registra segnali positivi in termi...
Goolge Pixel 9a 128GB a 359€ è un...
C'è un caricatore multiplo da 200...
Sconti, coupon, promo lampo: ecco la top...
Artemis II: completata la manovra di ins...
Panasonic LUMIX TZ300: la nuova compatta...
La società aerospaziale italiana ...
Il Politecnico di Milano guiderà ...
Amazon Leo punta ad aumentare la cadenza...
Pro Type Ergo: Razer si lancia a gamba t...
Artemis II: dal guasto risolto alla toil...
Le immagini e i video più spettac...
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:14.


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