|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C++] passaggio per riferimento
Ho questo prototipo:
Codice:
void LLDeviceSwitch::SetState(int State, mapIdState& IdStateMap) Mi piacerebbe poter chiamare la funzione in questo modo: Codice:
SetState( LLDevice::LL_DEVICE_STATE_OFF, NULL ); C'è qualche diavoleria e/o trucchetto che possa risolvere il problema. Potrei cambiare il prototipo, lo so, ma ciò comporterebbe la modifica di n^n funzioni 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 |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
ALT+SHIFT+C, modifichi il tipo del parametro, INVIO e fa tutto lui Sinceramente non ho idea come fare in C++..
__________________
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
ma io lavoro con Eclipse ...
ALT+SHIFT+C ???
__________________
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 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Lascia stare, credo sia una feature dell'IDE per fare Refactoring, ci sono anche in NeatBeans.
(selezioni un parametro nella firma del metodo che vuoi cambiare, rinomini, e in ogni punto del codice del tuo progetto dove quel metodo viene chiamato viene sostituito il vecchio parametro con il nuovo, comodo Cmq NULL dovrebbe essere una define, giusto? Invece di passare NULL direttamente, potresti istanziare un puntatore a "mapIdState" e inizializzarlo a NULL, e poi passare quello? Ultima modifica di banryu79 : 24-01-2008 alle 14:15. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() Prima faccio le cose fatte bene e poi mi dimentico di averle fatte È tutto così ben incastrato (oggetto contiene oggetti che contiengono oggetti ...) che devo solo cambiare i prototipi e le funzioni. In pratica la "insert( make_pair( " della mappa la uso solo (e giustamente) in un punto, quindi cambio solo quello. Comunque grazie. Però mi piacerebbe approfondire la cosa perchè è sempre meglio avere qualche trucco in tasca Il tuo consiglio non l'ho capito
__________________
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 |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
__________________
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 |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
ho provato anche a reinterpret_castare l'impossibile ma non riesco a fregarlo
__________________
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 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
mapIdState che roba è ?
La prima cosa che mi viene in mente, se mapIdSate è una classe, è quello di creare un NullObject...e mettere un factory method. Dovrebbe risultare qualcosa di questo tipo: SetState( LLDevice::LL_DEVICE_STATE_OFF, mapIdState::NullObject()); |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
typedef map<int, int > mapIdState; però è interessante 'sto NullObject() ... che roba è ? (ti stavo aspettando, lo sapevo che avresti risposto con qualcosa di figo
__________________
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 |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi sa che in questo caso ti conviene passare un riferimento ad un mapIdState vuoto, molto più semplice.
In ogni caso il NullObject è questo (AbstractBase fa da interfaccia): Codice:
class AbstractBase
{
private:
AbstractBase() {};
public:
void add(int i) = 0;
int get(int index) = 0;
};
class ADerived: public AbstractBase
{
vector <int> v;
public:
ADerived() {};
void add(int i) { v.push_back(i); };
int get(int index) { return v.at(i); };
};
class MyNullObject: public AbstractBase
{
public:
MyNullObject() {};
void add(int i) { };
int get(int index) { return 0; };
};
http://en.wikipedia.org/wiki/Null_Object_pattern |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
wow, figata ... mi dovrò salvare anche questo 3d
in effetti non è il mio caso perchè non passo una classe ma una semplice map. E comunque la map è sempre vuota, la passo perchè qualche elemento potrebbe riempirla con qualche state change o set value. Infatti adesso il prototipo ovunque ha questi parametri Codice:
funz(mapIdState* IdStateMap, mapIdVoidval* IdVoidvalMap) Certe volte so che l'evento non può creare state changes quindi volevo passare NULL ma per riferiemento pare sia impossibile.
__________________
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 |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
no, perchè certe azioni partono localmente e servono solo a settare lo state senza un output, senza una modifica di leds vari o stringhe.
quindi prima dovevo fare una cosa del tipo Codice:
mapIdState m; SetState( LLDevice::LL_DEVICE_STATE_OFF, m );
__________________
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 |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora semplicemente fai un'altra SetState con prototipo:
void LLDeviceSwitch::SetState(int State) e in void LLDeviceSwitch::SetState(int State, mapIdState& IdStateMap) suddividi le azioni in modo da richiamare SetState(int State) così da eliminare la duplicazione. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
non c'ho pensato vedi che lavorare troppo fa male !
__________________
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 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:33.





















