Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Classe statica inizializzata in un secondo momento
Forum - C/C++ - Classe statica inizializzata in un secondo momento

Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 22:14
Sabato, 10/10/2015
Buonasera, arrivo subito al dunque. Mi trovo nello sviluppo di una libreria in C++, nella file cpp dichiaro una classe statica, vorrei però poterla inizializzare (evocare il suo costrutto) all'interno di una funzione del namespace mantenendo la staticità della classe, mi chiedo, è possibile?
Esempio per capire meglio
Codice sorgente - presumibilmente C++

  1. #include "UART.h"
  2. #include "Buffer.h"
  3.  
  4. namespace UART
  5. {
  6.         Buffer RxBuffer;//Dichiaro la classe
  7.         Buffer TxBuffer;
  8.  
  9.         void Init();
  10. }
  11.  
  12. void UART::Init()
  13. {
  14. //Qui vorrei inizializzare i due buffer, mantenendo la staticità degli stessi
  15. }



Codice sorgente - presumibilmente C/C++

  1. class Buffer
  2. {
  3.        public:
  4.        Buffer(uint8_t[], uint8_t);
  5. }


Spero si capisca quello che vorrei fare.

Grazie.

Ultima modifica effettuata da Roby94 il 10/10/2015 alle 22:15
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:14
Sabato, 10/10/2015
Crea un metodo statico chiamato Init all'interno della classe e chiama quello invece che usare il costruttore.


Il mio blog: https://piero.dev
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 10:07
Domenica, 11/10/2015
L'ipotesi è di non poter modificare la libreria in quanto gia compilata.

Edit:
Ho pensato a questo
Codice sorgente - presumibilmente C++

  1. #include "UART.h"
  2.     #include "Buffer.h"
  3.      
  4.     namespace UART
  5.     {
  6.             Buffer RxBuffer(NULL, 0);//Dichiaro la classe
  7.             Buffer TxBuffer(NULL, 0);
  8.      
  9.             void Init();
  10.     }
  11.      
  12.     void UART::Init()
  13.     {
  14.             UART::RxBuffer = Buffer(RxBufferArray, RxBufferArraySize);
  15.             UART::TxBuffer = Buffer(TxBufferArray, TxBufferArraySize);
  16.     }


Se il costruttore della classe Buffer lo ammette questo approccio è valido?

Ultima modifica effettuata da Roby94 il 11/10/2015 alle 12:32
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:16
Domenica, 11/10/2015
No non è un approccio valido; non appena UART::Init ritorna, i destruttori vengono invocati.

Potresti usare questo approccio se dichiari  RxBuffer e TxBuffer come puntatori.


Il mio blog: https://piero.dev
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:41
Domenica, 11/10/2015
Cavoli, hai ragione, non ho però possibilità di adoperare l'heap, quindi niente puntatori.
Quindi non vi è soluzione?

Ultima modifica effettuata da Roby94 il 11/10/2015 alle 18:42
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:47
Domenica, 11/10/2015
Se hai accesso ai sorgenti della libreria, potresti modificarla e ricompilarla...


Il mio blog: https://piero.dev
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:51
Domenica, 11/10/2015
Direi che non ci sono altre soluzioni. Peccato. Grazie Piero.

PM Quote