Ho un programma che eseguo ripetutamente con vari set di parametri. Diversi parametri sono usati in diverse parti del programma (inclusi diversi file sorgente). Lo stesso parametro può essere utilizzato anche in luoghi diversi. Tuttavia, tutti i parametri sono costanti durante l'esecuzione dopo che sono stati impostati.
Ho scoperto molto rapidamente che dichiarare i parametri localmente non ha senso (implica dover ricordare dove ogni parametro è definito, ecc.), quindi ho fatto ricorso a params.h
dove ho dichiarato e definito tutti i parametri: const int Param1 = 42;
, ecc.
Il lato negativo di questo è che devo ricompilare ogni volta che cambio un parametro. Quindi sto pensando di usare il metodo qui sotto. Si basa sull'utilizzo di volatile
e const_cast
, che è normalmente considerato "sporco", ma garantisce che una volta che i parametri siano stati impostati in main
, non vengano accidentalmente modificati da nessun'altra parte nel programma.
Mi chiedo se le persone pensano che sia OK, perché alla fine voglio aprire il mio codice.
In params.h
:
namespace Params
{
extern volatile const int Param1;
// etc.
}
In main.cpp
:
#include "params.h"
volatile const int Params::Param1 = 0;
int main(int argc, char* argv[])
{
int* const pParam1 = const_cast<int*>(Params::Param1);
*pParam1 = // Get value from argv[] or some config.ini file.
// etc.
}