Qui ci sono un sacco di domande su statico e globale, ma penso che la mia domanda sia un po 'diversa.Condivisione di variabili statiche tra file: namespace vs class
Voglio sapere se esiste un modo per condividere una variabile collocata in uno spazio dei nomi tra i file come possono fare le variabili statiche in una classe.
Per esempio, ho codificato questo:
//Foo.h
class Foo
{
public:
static int code;
static int times_two(int in_);
};
namespace bar
{
static int kode;
}
-
//Foo.cpp
int Foo::code = 0;
int Foo::times_two(int in_)
{
bar::kode++;
code++;
return 2*in_;
}
-
//main.cpp
int main()
{
cout << "Foo::code = " << Foo::code << endl;
for(int i=2; i < 6; i++)
{
cout << "2 x " << i << " = " << Foo::times_two(i) << endl;
cout << "Foo::code = " << Foo::code << endl;
cout << "bar::kode = " << bar::kode << endl;
if(i == 3)
{
bar::kode++;
}
}
}
Tutto ciò che ha prodotto questo per codice e Kode:
Foo::code = 1,2,3,4
bar::kode = 0,0,1,1
Ancora una volta, c'è un modo per condividere una variabile collocata in uno spazio dei nomi tra i file come possono fare le variabili statiche in una classe? Il motivo per cui lo chiedo è perché pensavo di essere in grado di proteggermi dalle variabili globali in conflitto usando :: notation, e ho appena scoperto che non potevo. E come ogni programmatore che si rispetti da solo, credo che sto sbagliando.
'static' è probabilmente la parola chiave singola più sovraccarico in C++. Significa qualcosa di diverso in entrambi i contesti. – Flexo
... e in questo caso particolare, esattamente l'opposto di quello che vuoi. –