Sto lavorando su un codice C ++ legacy con due librerie. Library1 è la principale e Library2 utilizza le classi dalla Library1 (quindi ci sono alcune #include "HeaderFromLibrary1" nella Library2).
Nel profondo del codice di Library1, c'è un lavoro fatto e quando succede qualcosa devo impostare una variabile booleana. Library2 deve essere in grado di ottenere questo valore e resettarlo.
Tutto il codice è orientato agli oggetti, quindi non ci sono variabili globali né funzioni C, ma solo oggetti classi.
Quale sarebbe il modo migliore per essere in grado di modificare questa variabile booleana da queste librerie?
Quello che ho fatto è che ho creato due nuovi file in Library1: SharedData.cpp e SharedData.h.
SharedData.h
#ifndef SHARED_DATA_H_
#define SHARED_DATA_H_
namespace MyNameSpace
{
/*
* Get the Boolean and reset it to FALSE.
*/
boolean GetAndResetBoolean(void);
/*
* Set the Boolean.
*/
void SetBoolean(void);
}
#endif
SharedData.cpp
#include "util/SharedData.h"
#include "Mutex.h"
namespace MyNameSpace
{
static Mutex mutexBoolean;
static boolean myBoolean;
/**
* Method used to set the boolean.
*/
void SetBoolean(void)
{
ScopedLock lock(mutexBoolean);
myBoolean= TRUE;
}
/**
* Method used to get and reset the Boolean.
*/
boolean GetAndResetBoolean(void)
{
ScopedLock lock(mutexBoolean);
boolean currentBoolean = myBoolean;
myBoolean = FALSE;
return currentBoolean;
}
}
Quindi includo SharedData.h nel file che ho bisogno di impostare il valore booleano (Library1) e anche nel file ho bisogno di ottenere il valore e resettarlo.
Non mi piace che devo creare 2 variabili "globali". Preferirei memorizzare il valore booleano in un oggetto, ma la durata dell'oggetto che imposta il valore booleano non è molto lunga. E non voglio includere alcuna HeaderFromLibrary2.h in Library1 perché Library2 utilizza Library1 e non il contrario.
Hai qualche consiglio?