10/10/15 20:14
Roby94
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
#include "UART.h"
#include "Buffer.h"
namespace UART
{
Buffer RxBuffer;//Dichiaro la classe
Buffer TxBuffer;
void Init();
}
void UART::Init()
{
//Qui vorrei inizializzare i due buffer, mantenendo la staticità degli stessi
}
class Buffer
{
public:
Buffer(uint8_t[], uint8_t);
}
Spero si capisca quello che vorrei fare.
Grazie.
Ultima modifica effettuata da Roby94 10/10/15 20:15
aaa
10/10/15 21:14
pierotofy
Crea un metodo statico chiamato Init all'interno della classe e chiama quello invece che usare il costruttore.
11/10/15 8:07
Roby94
L'ipotesi è di non poter modificare la libreria in quanto gia compilata.
Edit:
Ho pensato a questo
#include "UART.h"
#include "Buffer.h"
namespace UART
{
Buffer RxBuffer(NULL, 0);//Dichiaro la classe
Buffer TxBuffer(NULL, 0);
void Init();
}
void UART::Init()
{
UART::RxBuffer = Buffer(RxBufferArray, RxBufferArraySize);
UART::TxBuffer = Buffer(TxBufferArray, TxBufferArraySize);
}
Se il costruttore della classe Buffer lo ammette questo approccio è valido?
Ultima modifica effettuata da Roby94 11/10/15 10:32
aaa
11/10/15 14:16
pierotofy
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.
11/10/15 16:41
Roby94
Cavoli, hai ragione, non ho però possibilità di adoperare l'heap, quindi niente puntatori.
Quindi non vi è soluzione?
Ultima modifica effettuata da Roby94 11/10/15 16:42
aaa
11/10/15 16:47
pierotofy
Se hai accesso ai sorgenti della libreria, potresti modificarla e ricompilarla...
11/10/15 16:51
Roby94
Direi che non ci sono altre soluzioni. Peccato. Grazie Piero.
aaa